Servlet单元测试

Ton*_*ony 5 java testng unit-testing servlets mockrunner

目前我正在使用TestNG框架来测试应用程序业务逻辑,最近我添加了一些Servlet类.

如何在TestNg框架中对这些Servlet类进行单元测试?

kop*_*per 18

最简单的方法之一是来自Jetty的ServletTester.一切都在嵌入式Jetty中自动完成,因此测试期间没有打开端口!如果您使用Maven,则需要以下工件来启用此方法:

<dependency>
  <groupId>org.mortbay.jetty</groupId>
  <artifactId>jetty-servlet-tester</artifactId>
  <version>6.1.16</version>
  <scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)

例:

准备ServletTester

ServletTester tester=new ServletTester(); 
tester.addServlet(HelloServlet.class, "/hello"); 
tester.start();
Run Code Online (Sandbox Code Playgroud)

创建HTTP请求

HttpTester request = new HttpTester(); 
request.setMethod("GET");
request.setHeader("Host","tester"); 
request.setURI("/hello");
request.setVersion("HTTP/1.0");
Run Code Online (Sandbox Code Playgroud)

调用servlet并检索响应:

HttpTester response = new HttpTester();
response.parse(tester.getResponses(request.generate()));
Run Code Online (Sandbox Code Playgroud)

断言您想要检查的内容及其内容:

assertEquals(200,response.getStatus()); 
assertEquals("Hello Servlet",response.getContent());
Run Code Online (Sandbox Code Playgroud)


ska*_*man 8

我建议您将所有业务逻辑 servlet类中移出到您可以测试的自己的类中.这使servlet成为业务逻辑和容器之间的粘合剂,其中没有任何内容值得测试.

该API类,如HttpServletRequest,ServletConfig等,是使用你所选择的嘲讽框架(JMock的,的Mockito等)的主要目标,因为他们是所有接口.

  • @Thomman:它总是可行的 - 只需从servlet委托给业务逻辑类.在servlet中没有*有*. (2认同)

Boz*_*zho 6

如果可能的话,请遵循skaffman的建议.如果没有,或者如果要将servlet的行为测试为前端控制器,而不是其中的业务逻辑,则可以使用: