Servletunit testing
目前我正在使用TestNG框架来测试应用程序业务逻辑,最近我添加了一些Servlet类。
如何在TestNg框架中对这些Servlet类进行unit testing?
如果可能的话,请遵循skaffman的建议。 如果没有,或者您想要测试servlet作为前端控制器的行为,而不是其中的业务逻辑,您可以使用:
- 的HtmlUnit
- selenium
- 仙人掌 (但我不知道它是否已经支持TestNG)
最简单的方法之一是来自Jetty的ServletTester 。 一切都在嵌入式Jetty中自动完成,因此测试期间没有打开端口! 如果您使用Maven,则需要以下工件来启用此方法:
org.mortbay.jetty jetty-servlet-tester 6.1.16 test
例:
准备ServletTester
ServletTester tester=new ServletTester(); tester.addServlet(HelloServlet.class, "/hello"); tester.start();
创建HTTP请求
HttpTester request = new HttpTester(); request.setMethod("GET"); request.setHeader("Host","tester"); request.setURI("/hello"); request.setVersion("HTTP/1.0");
调用servlet并检索响应:
HttpTester response = new HttpTester(); response.parse(tester.getResponses(request.generate()));
断言您想要检查响应及其内容:
assertEquals(200,response.getStatus()); assertEquals("Hello Servlet",response.getContent());
我建议您将所有业务逻辑从 servlet类中移出到您可以测试的自己的类中。 这使得servlet成为业务逻辑和容器之间的粘合剂,其中没有任何内容值得测试。
诸如HttpServletRequest
, ServletConfig
等API类是使用您选择的模拟框架(JMock,Mockito等)的主要目标,因为它们都是接口。