Wie erhalte ich bei Abnahmetests einen ActionContext von Struts 2?

Ich schreibe Akzeptanztests (Testen des Verhaltens) mit cucumber-jvm in einer Anwendung mit Struts 2 und Tomcat als Servlet-Container. Irgendwann in meinem Code muss ich den Benutzer von Struts 2 abrufenHttpSession, erstellt von einemHttpServletRequest.

Da ich Tests mache und Tomcat nicht laufe, habe ich keine aktive Sitzung und bekomme eineNullPointerException.

Hier ist der Code, den ich anrufen muss:

public final static getActiveUser() {
    return (User) getSession().getAttribute("ACTIVE_USER");
}

Und die getSession-Methode:

public final static HttpSession getSession() {
    final HttpServletRequest request (HttpServletRequest)ActionContext.
                          getContext().get(StrutsStatics.HTTP_REQUEST);
    return request.getSession();
}

Ehrlich gesagt weiß ich nicht viel über Struts 2, deshalb brauche ich ein bisschen Hilfe. Ich habe mir das angeschautGurken-JVM mit eingebettetem Kater Beispiel, aber ich habe Mühe zu verstehen.

Ich habe mir das auch angesehenStruts 2 Junit Tutorial. Leider deckt es nicht alle sehr gut abStrutsTestCase Features und es ist der einfachste Anwendungsfall (alles in allem ein ziemlich nutzloses Tutorial).

Wie kann ich meinen Abnahmetest so ausführen, als ob der Benutzer die Anwendung verwendet hätte?

AKTUALISIEREN:

Vielen Dank an Steven Benitez für die Antwort!

Ich musste zwei Dinge tun:

Verspotten Sie die HttpServletRequest, wie vorgeschlagen,Verspotten Sie die HttpSession, um das gewünschte Attribut zu erhalten.

Hier ist der Code, den ich meinen Gurken-JVM-Tests hinzugefügt habe:

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);
    }

}

Antworten auf die Frage(1)

Ihre Antwort auf die Frage