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
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"); –