我有一堆在Tomcat servlet容器下运行的servlet。我想将测试代码与生产代码分开,因此考虑使用一个测试框架。 JUnit很好地集成到了Eclipse中,但我无法让它使用正在运行的Tomcat服务器运行servlet。请问你能推荐一个支持测试Tomcat servlet的单元测试框架吗?Eclipse集成不是必需的。
我有一堆在Tomcat servlet容器下运行的servlet。我想将测试代码与生产代码分开,因此考虑使用一个测试框架。 JUnit很好地集成到了Eclipse中,但我无法让它使用正在运行的Tomcat服务器运行servlet。请问你能推荐一个支持测试Tomcat servlet的单元测试框架吗?Eclipse集成不是必需的。
看看ServletUnit,它是HttpUnit的一部分。简而言之,ServletUnit提供了一组模拟和实用程序库,您可以在普通的JUnit测试中使用它们来模拟一个servlet容器和其他与servlet相关的对象,如请求和响应对象。上面的链接包含示例。
Spring Framework提供了许多现成的模拟对象,适用于Servlet API中的多个类:
好的。忽略'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类扩展库。但从那时起,它将以相同的方式工作。
对于“容器内”测试,请查看Cactus。
如果您想在没有运行容器的情况下进行测试,您可以使用自己的模拟对象来模拟其组件(例如使用EasyMock),或者您可以尝试使用MockRunner,它具有用于测试servlet、jdbc连接等的“预定义”存根。
2018年2月更新:OpenBrace有限公司已关闭,其ObMimic产品不再受支持。
如果您想要一个新的替代品来进行Servlet的JUnit测试,您可能会发现我们公司的ObMimic库很有用。它可以从网站的下载页面免费获取。
与ServletUnit一样,它提供了一组类库,您可以在任何servlet容器之外的普通JUnit或TestNG测试中使用,以模拟Servlet API。
它的Servlet API对象具有无参数构造函数,完全可配置,并且可以检查所有相关的Servlet API数据和设置,并提供Servlet API javadoc指定的所有行为的完整模拟。为了帮助测试,它支持选择性记录Servlet API调用,控制任何依赖于容器的行为,检查任何不明确的调用(即Servlet API行为没有完全定义的情况),并为依赖于JNDI查找的任何servlet代码提供内存中的JNDI模拟。
有关完整细节、示例代码、“如何”指南、Javadoc等,请参阅网站。