Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Servlet Testing

I am using the ServletTester class provided by Jetty to test one of my servlets.

The servlet reads the the body of the request using InputStream.read() to construct a byte[] which is the decoded and acted on by the servlet.

The ServletTest class provides a method getResponses(ByteArrayBuffer) but I'm unsure how to create one of these in the correct format since it would also need to contain things like headers (e.g. "Content-Type: application/octet-stream).

Can anyone show me an easy way to construct this, preferably using an existing library so that I can use it in a similar way to the HttpTester class.

If there is a "better" way to test servlets (ideally using a local connector rather than via the tcp stack) I'd like to hear that also.

Many thanks,

like image 526
Scruffers Avatar asked Apr 21 '26 11:04

Scruffers


1 Answers

Why use a mock at all? Why not test the servlet by running it in jetty?

Servlet servlet = new MyServlet();
String mapping = "/foo";

    Server server = new Server(0);
    Context servletContext = new Context(server, contextPath, Context.SESSIONS);
    servletContext.addServlet(new ServletHolder(servlet), mapping);
    server.start();

    URL url = new URL("http", "localhost", server.getConnectors()[0].getLocalPort(), "/foo?bar");

    //get the url...assert what you want

    //finally server.stop();

Edit: Just wanting to reassure people that this is very fast. Its also a very reliable indicator of what your code will actually do, because it is in fact doing it.

like image 165
time4tea Avatar answered Apr 23 '26 23:04

time4tea