单元测试servlet

时间:2020-03-05 18:50:33  来源:igfitidea点击:

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

解决方案

回答

好的。忽略" 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);
}

然后开始向doPost添加代码。模拟将因为没有期望而失败,然后我们可以从那里设置期望。

请注意,如果要对类使用EasyMock,则必须使用EasyMock类扩展库。但是从那以后它将以相同的方式工作。

回答

对于"容器内"测试,请查看仙人掌

如果我们想在没有运行容器的情况下进行测试,则可以使用自己的模拟对象(例如,使用EasyMock)模拟其组件,也可以尝试使用具有"预定义"存根的MockRunner,以测试servlet,jdbc-connections等。

回答

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

回答

Spring框架为Servlet API中的几个类提供了不错的现成的模拟对象:

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