import org.mortbay.jetty.testing.* by adding jetty-servlet-tester-xxx.jar where xxx is the Jetty's version.First setup ServletTester instance, calling start method will run Jetty webserver in unoccupied port.
tester = new ServletTester();
tester.setContextPath("/");
tester.addServlet(MyServlet.class, "/my_servlet");
baseUrl = tester.createSocketConnector(true);
tester.start();
Now we're ready to test our servlet. Since in test mode all call is simulated, no browser application needed. Using HttpTester we can create request response object to simulate this. The important here is to add header "HOST" with value "tester" so the request get received by ServletTester initialized above.
Here is example to create POST method request to servlet.
HttpTester req = new HttpTester();
HttpTester resp = new HttpTester();
req.setMethod("POST");
req.setHeader("HOST", "tester");
req.setURI("/my_servlet");
req.setContent("name=value&name2=value2);
resp.parse(tester.getResponses(req.generate()));
Finally test the response object using assert.
assertEquals(200, resp.getStatus());
HttpTester also has getContent() method, testing the content returned can be done using regular expression matching, or use XMLUnit parser to easier the task.
To summarize, here is sample utility method to construct the request above.
public HttpTester executeWeb(String method, String uri, Mapparams, Map headers, String content) throws IOException, Exception {
HttpTester req = new HttpTester();
HttpTester resp = new HttpTester();
// set header
if (headers != null) {
Iteratorit = headers.keySet().iterator();
while (it.hasNext()) {
String key = it.next();
String value = headers.get(key);
req.setHeader(key, value);
}
}
if (params != null) {
if (method.equalsIgnoreCase("post"))
content = mapToParameter(params);
else if (uri.contains("?"))
uri += "&" + mapToParameter(params);
else
uri += "?" + mapToParameter(params);
}
req.setMethod(method);
req.setHeader("HOST", "tester");
req.setURI(uri);
req.setContent(content);
resp.parse(tester.getResponses(req.generate()));
return resp;
}