Как получить ActionContext от Struts 2 во время приемочных испытаний?
Я пишу приемочные тесты (тестирую поведение), используя cucumber-jvm, в приложении со Struts 2 и Tomcat в качестве моего контейнера сервлетов. В какой-то момент в моем коде мне нужно получить пользователя из Struts 2HttpSession
, созданныйHttpServletRequest
.
Так как я делаю тесты, а не запускаю Tomcat, у меня нет активной сессии, и я получаюNullPointerException
.
Вот код, который мне нужно позвонить:
public final static getActiveUser() {
return (User) getSession().getAttribute("ACTIVE_USER");
}
И метод getSession:
public final static HttpSession getSession() {
final HttpServletRequest request (HttpServletRequest)ActionContext.
getContext().get(StrutsStatics.HTTP_REQUEST);
return request.getSession();
}
Честно говоря, я не знаю много о Struts 2, поэтому мне нужна небольшая помощь. Я смотрел на этоогурец-JVM со встроенным котом пример, но я изо всех сил пытаюсь понять.
Я также смотрел на этоStruts 2 Junit Tutorial, К сожалению, это не очень хорошо охватывает всеStrutsTestCase
особенности и это простейшие варианты использования (все это довольно бесполезное руководство).
Итак, как мне выполнить мой приемочный тест, как если бы пользователь использовал приложение?
ОБНОВИТЬ:Спасибо Стивену Бенитесу за ответ!
Я должен был сделать две вещи:
Дразнить HttpServletRequest, как предложено,Дразнить HttpSession, чтобы получить атрибут, который я хотел.вот код, который я добавил в мои тесты cucumber-jvm:
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);
}
}