Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Servlet unit test

Currently I'm using TestNG framework for testing application business logic, i added some Servlet classes recently.

How do I unit test these Servlet classes in TestNg framework?

like image 355
Isabel Jinson Avatar asked Apr 03 '10 10:04

Isabel Jinson


1 Answers

One of the easiest ways is ServletTester from Jetty. Everything is done within embedded Jetty automatically, so there is no port opened during the testing! If you use Maven than the following artifact is required to enable this method:

<dependency>
  <groupId>org.mortbay.jetty</groupId>
  <artifactId>jetty-servlet-tester</artifactId>
  <version>6.1.16</version>
  <scope>test</scope>
</dependency>

Example:

Prepare ServletTester

ServletTester tester=new ServletTester(); 
tester.addServlet(HelloServlet.class, "/hello"); 
tester.start();

Create HTTP request

HttpTester request = new HttpTester(); 
request.setMethod("GET");
request.setHeader("Host","tester"); 
request.setURI("/hello");
request.setVersion("HTTP/1.0");

Call servlet and retrieve response:

HttpTester response = new HttpTester();
response.parse(tester.getResponses(request.generate()));

Assert what you want to check on response and it's content:

assertEquals(200,response.getStatus()); 
assertEquals("Hello Servlet",response.getContent());
like image 68
kopper Avatar answered Oct 04 '22 01:10

kopper