Co zwykle robię, to unikać wywoływania metod statycznych w ziarnach Chcę przetestować. Oznacza to, że Twój aktualny kod ma być refaktoryzowany:
FacesContext.getCurrentInstance().getExternalContext()
.getSessionMap().get("paramKey");
Czy są sposoby na przetestowanie ich za pomocą wywołań metod statycznych? Prawdopodobnie tak, ale oni doprowadzili mnie do wielu kłopotów bardziej niż pomocy. Więc na koniec pozbyłem się ich i zmieniłem swój projekt. Po prostu niech zrobi to druga fasola (o której będziesz się później pozorować). W twoim przypadku, stworzyć @SessionScoped
fasoli, który zarządza tę funkcjonalność:
@ManagedBean
@SessionScoped
public class SessionBean{
public Object getSessionParam(String paramKey){
FacesContext.getCurrentInstance().getExternalContext()
.getSessionMap().get(paramKey);
}
}
i wstrzyknąć że ziarna z każdego ziarna, który potrzebuje go (ja zazwyczaj rozciągają się moim zdaniem/request fasolę z abstrakcyjnego fasoli, która ma go, więc don „t muszą wdrożyć go w każdym pojedynczym fasoli):
@ManagedBean
@RequestScoped
public class RequestBean{
@ManagedProperty(value="#{sessionBean}")
private SessionBean sessionBean;
public void accessSessionParam(){
sessionBean.getSessionParam("name");
}
}
ten sposób można łatwo uzyskać dostęp do metody statyczne, za pośrednictwem pomocniczego SessionBean
. Następnie, jak go przetestować? Wystarczy utworzyć makiety z nim (przy użyciu Mockito, na przykład):
public class Test{
public void test1(){
SessionBean sb = Mockito.mock(SessionBean.class);
//Mock your 'getSessionParam' method
ValueBean vb = new ValueBean();
Mockito.when(sb.getSessionParam(Mockito.anyString()).thenReturn(vb);
//Create your bean to test and set your mock to it
RequestBean rb = new RequestBean();
rb.setSessionBean(sb);
//here you can test your RequestBean assuming
//sessionBean.getSessionParam()
//will return vb for every single call
}
}
Jakiego szkieletu używasz do testowania fasoli zarządzanej przez JSF? –
Próbuję uniknąć konieczności testowania na zarządzanym kontenerze (na przykład przy użyciu Arquilliana). Moim celem jest wyśmiewanie wszystkich wywołań metod do wstrzykniętych zasobów, ponieważ zajmuję się [EasyGloss] (https://java.net/projects/easygloss). Jeśli masz lepszą strategię, daj mi znać :-) –