Java Servlet单元测试
目前我正在使用TestNG框架测试应用程序业务逻辑,最近我添加了一些Servlet类Java Servlet单元测试,java,unit-testing,servlets,testng,mockrunner,Java,Unit Testing,Servlets,Testng,Mockrunner,目前我正在使用TestNG框架测试应用程序业务逻辑,最近我添加了一些Servlet类 如何在TestNg框架中对这些Servlet类进行单元测试 我建议您将所有业务逻辑从servlet类转移到您自己可以测试的类中。这使得servlet成为业务逻辑和容器之间的粘合剂,没有任何值得测试的内容 诸如HttpServletRequest、ServletConfig等API类是使用您选择的模拟框架(JMock、Mockito等)的主要目标,因为它们都是接口。如果可能,请遵循skaffman的建议。如果不是
如何在TestNg框架中对这些Servlet类进行单元测试 我建议您将所有业务逻辑从servlet类转移到您自己可以测试的类中。这使得servlet成为业务逻辑和容器之间的粘合剂,没有任何值得测试的内容
诸如
HttpServletRequest
、ServletConfig
等API类是使用您选择的模拟框架(JMock、Mockito等)的主要目标,因为它们都是接口。如果可能,请遵循skaffman的建议。如果不是,或者如果您想测试servlet作为前端控制器的行为,而不是它们内部的业务逻辑,您可以使用:
- (但我不知道它是否已经支持TestNG)
- 最简单的方法之一是从码头出发。所有操作都是在嵌入式Jetty中自动完成的,因此在测试期间没有打开任何端口!如果使用Maven,则需要以下工件才能启用此方法:
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-servlet-tester</artifactId>
<version>6.1.16</version>
<scope>test</scope>
</dependency>
创建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());
谢谢Bozho,Selenium支持TestNG吗?是的,Selenium支持TestNG。不过,我只会在需要并行运行测试时使用它。如果没有,请使用JUnit。谢谢Skaffman,我的servlet处理会话和cookie相关的操作。因此,将这些逻辑移到另一个类是不可能的。我正在寻找一个API,它允许我在testNG中对servlet进行单元测试。@Thomman:这总是可能的——只需将servlet委托给业务逻辑类即可。servlet中不需要任何东西。仍然可以在servlet级别进行测试,尽管这将是集成测试而不是单元测试。@koppernickus:我可以将这个测试类与TestNG集成吗?@Thomman:可以。这个类独立于任何测试框架。其他servlet测试人员需要一个端口等,可能是
assertEquals(200,response.getStatus());
assertEquals("Hello Servlet",response.getContent());