Como obter um ActionContext do Struts 2 durante os testes de aceitação?
Estou escrevendo testes de aceitação (testando o comportamento) usando cucumber-jvm, em um aplicativo com Struts 2 e Tomcat como meu Container Servlet. Em algum momento no meu código, eu preciso buscar o usuário do Struts 2HttpSession
, criado por umHttpServletRequest
.
Como estou fazendo testes e não executando o Tomcat, não tenho uma sessão ativa e recebo umaNullPointerException
.
Aqui está o código que eu preciso chamar:
public final static getActiveUser() {
return (User) getSession().getAttribute("ACTIVE_USER");
}
E o método getSession:
public final static HttpSession getSession() {
final HttpServletRequest request (HttpServletRequest)ActionContext.
getContext().get(StrutsStatics.HTTP_REQUEST);
return request.getSession();
}
Com toda honestidade, não sei muito sobre o Struts 2, então preciso de uma pequena ajuda. Eu estive olhando para issopepino-jvm com tomcat incorporado exemplo, mas estou lutando para entender.
Eu também estive olhando para issoStruts 2 Junit Tutorial. Infelizmente, não cobre muito bem todo oStrutsTestCase
características e é o mais simples dos casos de uso (todos considerados, um tutorial bastante inútil).
Então, como posso executar meu teste de aceitação como se o usuário estivesse usando o aplicativo?
ATUALIZAR:Obrigado a Steven Benitez pela resposta!
Eu tive que fazer duas coisas:
Mock the HttpServletRequest, como sugerido,Mock the HttpSession para obter o atributo que eu queria.aqui está o código que eu adicionei aos meus testes de pepino-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);
}
}