Как получить ActionContext от Struts 2 во время приемочных испытаний?
Я пишу приемочные тесты (тестирую поведение), используя cucumber-jvm, в приложении со Struts 2 и Tomcat в качестве моего контейнера сервлетов. В какой-то момент в моем коде мне нужно получить пользователя из Struts 2HttpSession
, созданный.HttpServletRequest
Так как я'я делаю тесты и не запускаю Tomcat, я неу меня есть активный сеанс, и я получаю.NullPointerException
Вот'S код, который мне нужно позвонить:
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
особенности и этоs простейшие варианты использования (все рассмотренные, довольно бесполезный учебник).
Итак, как мне выполнить мой приемочный тест, как если бы пользователь использовал приложение?
ОБНОВИТЬ:Спасибо Стивену Бенитесу за ответ!
Я должен был сделать две вещи:
Дразнить 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 contextMap = new HashMap();
contextMap.put(StrutsStatics.HTTP_REQUEST, request);
ActionContext.setContext(new ActionContext(contextMap));
}
@After
public void destroyTests() {
user = null;
request = null;
session = null;
ActionContext.setContext(null);
}