目前我正在使用 TestNG 框架来测试应用程序业务逻辑,我最近添加了一些 Servlet 类。
如何在 TestNg 框架中对这些 Servlet 类进行单元测试?
目前我正在使用 TestNG 框架来测试应用程序业务逻辑,我最近添加了一些 Servlet 类。
如何在 TestNg 框架中对这些 Servlet 类进行单元测试?
最简单的方法之一是Jetty 的ServletTester。一切都是在嵌入式 Jetty 中自动完成的,因此在测试期间没有打开任何端口!如果您使用 Maven,则需要以下工件来启用此方法:
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-servlet-tester</artifactId>
<version>6.1.16</version>
<scope>test</scope>
</dependency>
例子:
准备 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 就像您的业务逻辑和容器之间的粘合剂一样,其中没有任何值得测试的东西。
API 类(如HttpServletRequest
、ServletConfig
等)是使用您选择的模拟框架(JMock、Mockito 等)的主要目标,因为它们都是接口。