Jak uzyskać ActionContext z Struts 2 podczas testów akceptacyjnych?
Piszę testy akceptacyjne (testowanie zachowania) za pomocą ogórka-jvm, na aplikacji z Struts 2 i Tomcat jako moim Servlet Container. W pewnym momencie mojego kodu muszę pobrać użytkownika z Struts 2HttpSession
, stworzony przezHttpServletRequest
.
Ponieważ wykonuję testy i nie używam Tomcata, nie mam aktywnej sesji i otrzymujęNullPointerException
.
Oto kod, który muszę zadzwonić:
public final static getActiveUser() {
return (User) getSession().getAttribute("ACTIVE_USER");
}
I metoda getSession:
public final static HttpSession getSession() {
final HttpServletRequest request (HttpServletRequest)ActionContext.
getContext().get(StrutsStatics.HTTP_REQUEST);
return request.getSession();
}
Szczerze mówiąc, niewiele wiem o Struts 2, więc potrzebuję trochę pomocy. Patrzyłem na toogórek-jvm z osadzonym kocurem przykład, ale staram się zrozumieć.
Ja też na to patrzyłemSamouczek Struts 2 Junit. Niestety, nie obejmuje to zbyt dobrze wszystkichStrutsTestCase
funkcje i jest to najprostszy przypadek użycia (wszystkie rozważane, całkiem bezużyteczny poradnik).
Jak więc mogę uruchomić test akceptacji, tak jakby użytkownik korzystał z aplikacji?
AKTUALIZACJA:Dziękujemy Stevenowi Benitezowi za odpowiedź!
Musiałem zrobić dwie rzeczy:
Jak zasugerowano, wyszykuj HttpServletRequest,Wyszykuj HttpSession, aby uzyskać żądany atrybut.Oto kod, który dodałem do moich testów ogórka:
public class StepDefs {
User user;
HttpServletRequest request;
HttpSession session;
@Before
public void prepareTests() {
// create a user
// mock the session using mockito
session = Mockito.mock(HttpSession.class);
Mockito.when(session.getAttribute("ACTIVE_USER").thenReturn(user);
// mock the HttpServletRequest
request = Mockito.mock(HttpServletRequest);
Mockito.when(request.getSession()).thenReturn(session);
// set the context
Map<String, Object> contextMap = new HashMap<String, Object>();
contextMap.put(StrutsStatics.HTTP_REQUEST, request);
ActionContext.setContext(new ActionContext(contextMap));
}
@After
public void destroyTests() {
user = null;
request = null;
session = null;
ActionContext.setContext(null);
}
}