Nicht bekommen kann die Sitzung für Junit-Tests
Meine Struts2 Action-Klassen, verwenden Sie den folgenden code, um erfolgreich Zugriff auf die session
ActionContext.getContext().getSession().clear();
Jedoch, wenn ich versuche, mit Junit zu testen, meine Action-Klassen bekomme ich eine NullPointer exception.
Ich habe die überprüfung einige der Kommentare, die andere auf StackOverflow und habe mit dem folgenden code:
HttpServletRequest request;
HttpSession session;
@Before
public void setUp() throws Exception {
request = Mockito.mock(HttpServletRequest.class);
request.setAttribute("beanList", beanList);
request = Mockito.mock(HttpServletRequest.class);
Mockito.when(request.getSession()).thenReturn(session);
Map<String, Object> contextMap = new HashMap<String, Object>();
contextMap.put(StrutsStatics.HTTP_REQUEST, request);
ActionContext.setContext(new ActionContext(contextMap));
}
Jedoch noch einen Nullzeiger-Fehler aus. Das system ist in der Lage, erfolgreich zu finden, Holen Sie sich den Kontext, aber wenn es versucht, die session-es stirbt in mir. Ich habe auch versucht ein paar verschiedene Möglichkeiten, um zu erreichen das gleiche Ziel ohne Erfolg. Keine Ahnung, was ich falsch mache?
- Mockito ist groß, aber Sie brauchen es nicht für diesen Fall. Die Sitzung ist nur eine Karte. Siehe meine Antwort unten für details. Auch Ihre NPE ist wahrscheinlich aufgrund der Tatsache, dass Sie nicht wirklich festlegen des Sitzungs-Karte in Ihrem ActionContext überall. Sie werden nur das hinzufügen der HttpServletRequest.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie den dependency injection Ansatz und ändern Sie Ihre Maßnahmen zur Umsetzung
SessionAware
. Dann, das Struts2-framework injiziert die Sitzung in Ihre Aktion, wie im Beispiel unten. Schließlich können Sie testen, indem Sie einfach die Injektion einer Karte in Ihrer Aktion.FYI,
ServletConfigInterceptor
Griffe Durchführung dieser Einspritzung und die gleiche Art von Einspritzung ist für den Zugriff auf andere servlet-Objekte wie denHttpServletRequest
oder dieServletContext
.Was ist mit der Instanziierung oder Verspottung Ihrer Sitzung?
session = mock(HttpSession.class);
bevor Sie
Mockito.when(request.getSession()).thenReturn(session);
when
- Anweisung an der Stelle in Ihrem test, dass der code tatsächlich fordertgetSession
nicht in der Setup-Methode