2016-06-01 7 views
0

alle! Ich habe ein Problem mit Tests Servlets I aktualisiert MY TEST, NPE an dieser Zeile in Servlet "session.setAttribute (" Login ", user.getLogin());"NPE beim Testen von Servlet mit testNG und Mockito

Mein Servlet:

@WebServlet("/login") 
public class LoginServlet extends HttpServlet { 

private IUserDao dao; 

@Override 
public void init() throws ServletException { 
    dao = (IUserDao) getServletContext().getAttribute("Users"); 
} 

@Override 
protected void doPost(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 

    HttpSession session = request.getSession(); 

    if (dao.isUserExists(request.getParameter(LOGIN), request.getParameter(PASSWORD))) { 
     User user = dao.getUser(request.getParameter(LOGIN)); 

     session.setAttribute("login", user.getLogin()); 
     session.setAttribute("message", "you logged in successfully!"); 
     response.sendRedirect("hello.jsp"); 
     return; 
    } 

    User notUser = new User(request.getParameter(LOGIN), request.getParameter(PASSWORD)); 
    session.setAttribute("user", notUser); 
    session.setAttribute("wrongUserCredentials", "Wrong login or password"); 
    response.sendRedirect("login.jsp"); 

} 

}

`

Mein Test:

@Test(groups = "positive") 
public class TestLoginServlet extends Mockito { 

private static final Logger LOGGER = Logger.getRootLogger(); 
@Mock 
private IUserDao dao; 




@BeforeClass 
public void beforeClass() { 
    MockitoAnnotations.initMocks(this); 

} 

@Test 
public void testDoPostLoginServlet() throws Exception { 

      HttpServletRequest request = mock(HttpServletRequest.class); 
    HttpServletResponse response = mock(HttpServletResponse.class); 
    HttpSession session = mock(HttpSession.class); 
    ServletConfig config = mock(ServletConfig.class); 
    ServletContext context = mock(ServletContext.class); 

    UserDaoInMemory daoInMemory = new UserDaoInMemory(); 
    UserDaoInMemory spy = spy(daoInMemory); 
    User user = new User("kote", "Qw12"); 

    when(config.getServletContext()).thenReturn(context); 
    when(request.getParameter(LOGIN)).thenReturn(user.getLogin()); 
    when(request.getParameter(PASSWORD)).thenReturn(user.getPassword()); 
    when(request.getSession()).thenReturn(session); 
    when(request.getServletContext()).thenReturn(context); 
    when(context.getAttribute("Users")).thenReturn(spy); 
    doReturn(true).when(spy).isUserExists(user.getLogin(), user.getPassword()); 

    LoginServlet servlet = new LoginServlet(); 
    servlet.init(config); 
    servlet.doPost(request, response); 

    verify(request, atLeast(1)).getParameter(LOGIN); 
    verify(request, atLeast(1)).getParameter(PASSWORD); 
    LOGGER.info("Passed"); 
} 

}

Ausgang: java.lang.Nul lPointerException bei com.epam.denys_leunov.java.lesson9.servlets.LoginServlet.doPost (LoginServlet.java:32) bei com.epam.denys_leunov.java.lesson9.servlets.TestLoginServlet.testDoPostLoginServlet (TestLoginServlet.java:61) bei sun.reflect.NativeMethodAccessorImpl.invoke0 (native Methode) bei sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) bei sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) bei java.lang. reflect.Method.invoke (Methode.java:497) bei org.testng.internal.MethodInvocationHelper.invokeMethod (MethodInvocationHelper.java:85) bei org.testng.internal.Invoker.invokeMethod (Invoker.java:639) bei org.testng.internal.Invoker.invokeTestMeth od (Invoker.java:816) bei org.testng.internal.Invoker.invokeTestMethods (Invoker.java:1124) bei org.testng.internal.TestMethodWorker.invokeTestMethods (TestMethodWorker.java:125) bei org.testng. internal.TestMethodWorker.run (TestMethodWorker.java:108) bei org.testng.TestRunner.privateRun (TestRunner.java:774) bei org.testng.TestRunner.run (TestRunner.java:624) bei org.testng. SuiteRunner.runTest (SuiteRunner.java:359) bei org.testng.SuiteRunner.runSequentially (SuiteRunner.java:354) bei org.testng.SuiteRunner.privateRun (SuiteRunner.java:312) bei org.testng.SuiteRunner. run (SuiteRunner.java:261) bei org.testng.SuiteRunnerWorker.runSuite (SuiteRunnerWorker.java:52) bei org.testng.SuiteRunnerWorker.run (SuiteRunnerWorker.java:86) bei org.testng.TestNG.runSuitesSequentially (TestNG.java:1191) bei org.testng.TestNG.runSuitesLocally (TestNG.java:1116) bei org.testng.TestNG.run (TestNG.java:1024) bei org.testng.IDEARemoteTestNG.run (IDEARemoteTestNG.java:74) bei org.testng.RemoteTestNGStarter.main (RemoteTestNGStarter.java:121) bei sun. reflect.NativeMethodAccessorImpl.invoke0 (native Methode) bei sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) bei sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) bei Methode von java.lang.reflect .invoke (Method.java:497) bei com.intellij.rt .execution.application.AppMain.main (AppMain.java:144) Code eingeben hier Code eingeben hier

+0

Ich habe ein Problem bei dieser Zeile if (dao.isUserExists (request .getParameter (LOGIN), request.getParameter (PASSWORD))), warum es nicht von diesem doReturn (true) gespottet wird.when (spy) .isUserExists ("kote", "Qw12"); –

Antwort

0

Ihr Problem ist in IUserDao dao;, die public void init() in Verfahren initialisiert wird. Also, um von Nullpointer loswerden müssen Sie init() aufrufen, bevor doPost

Aktualisiert Ausführung: Versuchen in Test hinzufügen, bevor servlet.doPost(request, response);

ServletContext sc = servlet.getServletContext(); 
ServletContext scSpy = spy(sc); 
// return dao from servlet context 
doReturn(spy).when(scSpy).getAttribute("Users"); 
servlet.init(); 
+0

Danke für die Antwort, aber ich habe neue NPE bei servlets.LoginServlet.init (LoginServlet.java:23) –

+0

ich habe es getan, aber haben neue NPE in dieser Zeile servlets.LoginServlet.init (LoginServlet.java:23) dao = (IUserDao) getServletContext(). GetAttribute ("Benutzer"); –

+0

Ich aktualisierte die Antwort, vielleicht hilft Ihnen das – Solorad

Verwandte Themen