1

I have a simple servlet. He forward to jsp page. But when I use mock objects for HttpServletRequest and HttpServletResponse instead original objects in my test, I get NullPointerException.

public class SimpleServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.getRequestDispatcher("WEB-INF/views/AdminMenu.jsp")
                .forward(req, resp); // In this place I get NPE (16th string.)
    }
}

This is my test which create HttpServletRequest and HttpServletResponseobjects and send their into doPost method:

@Test
public void test() throws ServletException, IOException {

    final HttpServletRequest req = mock(HttpServletRequest.class);
    final HttpServletResponse resp = mock(HttpServletResponse.class);


    final SimpleServlet simpleServlet = new SimpleServlet();

    simpleServlet.doPost(req, resp);

}

This is my log after running text:

java.lang.NullPointerException
    at ru.pravvich.servlets.SimpleServlet.doPost(SimpleServlet.java:16)
    at ru.pravvich.servlets.SimpleServletTest.test(SimpleServletTest.java:28)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:117)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:42)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:262)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:84)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)

What reason? Help me fix this issue. Thank You.

3
  • 1
    since you mocked the request, you need to provide getRequestDispatcher(). By default its returning NULL. Commented Jun 20, 2017 at 12:01
  • 2
    per default mocks return null unless you configured a return value. This means you need to configure the HttpServletRequestmock to return something when method getRequestDispatcher() is called on it. Commented Jun 20, 2017 at 12:01
  • Yes! Thank You! It's work! Commented Jun 20, 2017 at 12:06

2 Answers 2

3

Mock the call of req.getRequestDispatcher("WEB-INF/views/AdminMenu.jsp") to avoid NullPointerException.

Sign up to request clarification or add additional context in comments.

Comments

2

You need to add following

RequestDispatcher rd = mock(RequestDispatcher.class);
when(req.getRequestDispatcher(eq("WEB-INF/views/AdminMenu.jsp"))).thenReturn(rd);

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.