¿Cómo obtener un ActionContext de Struts 2 durante las pruebas de aceptación?
Estoy escribiendo pruebas de aceptación (probando el comportamiento) usando cucumber-jvm, en una aplicación con Struts 2 y Tomcat como mi Servlet Container. En algún punto de mi código, necesito recuperar al usuario de Struts 2HttpSession
, creado por unHttpServletRequest
.
Ya que estoy haciendo pruebas y no estoy ejecutando Tomcat, no tengo una sesión activa y me sale unNullPointerException
.
Aquí está el código que necesito llamar:
public final static getActiveUser() {
return (User) getSession().getAttribute("ACTIVE_USER");
}
Y el método getSession:
public final static HttpSession getSession() {
final HttpServletRequest request (HttpServletRequest)ActionContext.
getContext().get(StrutsStatics.HTTP_REQUEST);
return request.getSession();
}
Honestamente, no sé mucho sobre Struts 2, así que necesito un poco de ayuda. He estado mirando estopepino jvm con tomcat incrustado Ejemplo, pero estoy luchando por entender.
También he estado mirando estoStruts 2 Junit Tutorial. Lamentablemente, no cubre muy bien todas lasStrutsTestCase
características y es el más simple de los casos de uso (todos considerados, un tutorial bastante inútil).
Entonces, ¿cómo puedo ejecutar mi prueba de aceptación como si el usuario estuviera usando la aplicación?
ACTUALIZAR:Gracias a Steven Benitez por la respuesta!
Tuve que hacer dos cosas:
Simula el HttpServletRequest, como se sugiere,Simula la sesión HttpSession para obtener el atributo que quería.Aquí está el código que he agregado a mis pruebas 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);
}
}