目前我正在使用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等)的主要目标,因为它们都是接口。