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成为业务逻辑和容器之间的粘合剂,其中没有任何内容值得测试。

诸如HttpServletRequestServletConfig等API类是使用您选择的模拟框架(JMock,Mockito等)的主要目标,因为它们都是接口。