我有一堆在 Tomcat servlet 容器下运行的 servlet。我想将测试代码与生产代码分开,所以我考虑使用测试框架。JUnit 很好地集成到 Eclipse 中,但我未能使用正在运行的 Tomcat 服务器使其运行 servlet。您能否推荐一个支持测试 Tomcat servlet 的单元测试框架?Eclipse 集成很好,但不是必需的。
6 回答
查看ServletUnit,它是 HttpUnit 的一部分。简而言之,ServletUnit 提供了一个模拟库和实用程序库,您可以在普通 JUnit 测试中使用这些模拟和实用程序来模拟 servlet 容器和其他与 servlet 相关的对象,例如请求和响应对象。上面的链接包含示例。
Spring 框架为 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-connections 等的“预定义”存根。
2018 年 2 月更新:OpenBrace Limited 已关闭,不再支持其 ObMimic 产品。
如果您想要一个更新的 ServletUnit 替代品来对 Servlet 进行 JUnit 测试,您可能会发现我公司的ObMimic库很有用。它可以从网站的下载页面免费获得。
与 ServletUnit 一样,它提供了一个类库,您可以在任何 servlet 容器之外的普通 JUnit 或 TestNG 测试中使用这些类库来模拟 Servlet API。
Its Servlet API objects have no-argument constructors, are fully configurable and inspectable for all relevant Servlet API data and settings, and provide a complete simulation of all of the behaviour specified by the Servlet API's javadoc. To help with testing there's support for selective recording of Servlet API calls, control over any container-dependent behaviour, checks for any ambiguous calls (i.e. where the Servlet API behavour isn't fully defined), and an in-memory JNDI simulation for any servlet code that relies on JNDI lookups.
For full details, example code, "how to" guides, Javadoc etc, see the website.