1

Use this code for servlet html reponse:

@Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { RequestDispatcher dispatcher = request.getRequestDispatcher("/projects.jsp"); dispatcher.forward(request, response); }

Method work good and return into browser HTML builded by projects.jsp. Now i want test this HTML-reponse, but i can`g get a JSP output.

`

@Test
public void doGetTest() {
    HttpServletResponse response = Mockito.mock(HttpServletResponse.class);
    HttpServletRequest request = Mockito.mock(HttpServletRequest.class);
    RequestDispatcher requestDispatcher = Mockito.mock(RequestDispatcher.class);
    HttpSession session = Mockito.mock(HttpSession.class);

    StringWriter stringWriter = new StringWriter();
    PrintWriter printWriter = new PrintWriter(stringWriter);
    try {
        when(response.getWriter()).thenReturn(printWriter);
        when(request.getSession()).thenReturn(session);
        when(request.getRequestDispatcher("/projects.jsp")).thenReturn(requestDispatcher);
    } catch (IOException ex) {
        fail(ex.getMessage());
    }

    try {
        new Projects().doGet(request, response);
        verify(requestDispatcher).forward(request, response);
    } catch (ServletException | IOException ex) {
        fail(ex.getMessage());
    }

    printWriter.flush();

    System.err.println(stringWriter.getBuffer().toString().trim());
}

`

stringWriter.getBuffer().toString().trim()

here not return HTML-code, just blank string always. I tried ask google and here, but i can`t find work examples for JUnit and Java 8 (found Selenium, for example). This code of test good work without jsp (servlet write response by response.getWriter().println()). Tell please, how can i get JSP HTML response in this case?

Anton K.
  • 31
  • 6
  • You can get jsp as a result returned by the response. – Roman C Mar 07 '18 at 23:48
  • You mean get it from response mock after make request? – Anton K. Mar 08 '18 at 06:43
  • You can't get it from response mock unlsess you write something to the response. – Roman C Mar 08 '18 at 11:54
  • I think what @RomanC is trying to tell you is that what you did is create a mock request/response, but since JSPs are also processed by a container-dependent servlet ([e.g. JspServlet on Tomcat](http://tomcat.apache.org/tomcat-9.0-doc/api/org/apache/jasper/servlet/JspServlet.html)) you'll have to either invoke the `jsp` servlet directly (if possible) or fill the mock response yourself. Although `Projects.doGet()` does try to forward the request to `"/projects.jsp"`, since there's no container running, that forward is just a no-op from Mockito - it does nothing, just returns. – Mismatch Jan 04 '19 at 15:37

0 Answers0