Jetty的ServletTester对于测试Servlet应用程序非常有用.我之前使用过Jetty 6的ServletTester,它运行得很好.
例如:
org.mortbay.jetty jetty-servlet-tester 6.1.26 test
package example; import org.junit.Test; import static org.hamcrest.CoreMatchers.*; import static org.junit.Assert.*; import org.mortbay.jetty.testing.HttpTester; import org.mortbay.jetty.testing.ServletTester; public class SampleServletTest { @Test public void testDoGet() throws Exception { ServletTester tester = new ServletTester(); tester.addServlet(SampleServlet.class, "/index"); tester.start(); HttpTester request = new HttpTester(); request.setMethod("GET"); request.setHeader("Host", "tester"); // should be "tester" request.setURI("/index"); request.setVersion("HTTP/1.1"); request.setContent(""); String responses = tester.getResponses(request.generate()); HttpTester response = new HttpTester(); response.parse(responses); assertThat(response.getStatus(), is(equalTo(200))); } }
ServletTester的API在Jetty 9.x中得到了很大改进.
org.eclipse.jetty jetty-servlet 9.0.7.v20131107 test
package example; import org.junit.Test; import static org.hamcrest.CoreMatchers.*; import static org.junit.Assert.*; import org.eclipse.jetty.http.HttpTester; import org.eclipse.jetty.servlet.ServletTester; public class SampleServletTest { @Test public void testDoGet() throws Exception { ServletTester tester = new ServletTester(); tester.addServlet(SampleServlet.class, "/index"); tester.start(); HttpTester.Request request = HttpTester.newRequest(); request.setMethod("GET"); request.setHeader("Host", "tester"); // should be "tester" request.setURI("/index"); request.setVersion("HTTP/1.1"); request.setContent(""); HttpTester.Response response = HttpTester.parseResponse(tester.getResponses(request.generate())); assertThat(response.getStatus(), is(equalTo(200))); } }
新的API看起来非常酷,但不幸的是上面的代码运行得很慢......这段代码每次运行需要10秒.你相信吗?
有没有人知道这个问题?如果这只是我的错误,这是一个非常好的消息.