单元测试servlet

Yuv*_*l F 14 eclipse junit tomcat unit-testing servlets

我有一堆在Tomcat servlet容器下运行的servlet.我想将测试代码与生产代码分开,所以我考虑使用测试框架.JUnit很好地集成到Eclipse中,但我没能使用正在运行的Tomcat服务器运行servlet.您能否推荐一个支持测试Tomcat servlet的单元测试框架?Eclipse集成很好但不是必需的.

Sco*_*ale 9

查看ServletUnit,它是HttpUnit的一部分.简而言之,ServletUnit提供了一个模拟库和实用程序库,您可以在普通的JUnit测试中使用它来模拟servlet容器和其他与servlet相关的对象,如请求和响应对象.上面的链接包含示例.

  • 自2008-05以来,HttpUnit项目似乎没有任何活动.也许它死了? (2认同)

WMR*_*WMR 6

Spring Framework为Servlet API中的几个类提供了很好的现成模拟对象:

http://static.springframework.org/spring/docs/2.5.x/api/org/springframework/mock/web/package-summary.html


Wil*_*ent 5

好的.忽略'tomcat'位并编码到servlet,最好的办法是为响应创建模拟并请求对象,然后告诉它你对它的期望.

所以对于一个标准的空doPost,并使用EasyMock,你将拥有

public void testPost() {
   mockRequest = createMock(HttpServletRequest.class);
   mockResponse = createMock(HttpServletResponse.class);
   replay(mockRequest, mockResponse);
   myServlet.doPost(mockRequest, mockResponse);
   verify(mockRequest, mockResponse);
}
Run Code Online (Sandbox Code Playgroud)

然后开始向doPost添加代码.模拟会失败,因为他们没有期望,然后你可以从那里设定期望.

请注意,如果要将EasyMock与类一起使用,则必须使用EasyMock类扩展库.但从那时起它将以同样的方式运作.