Unit-testing servlets
我有一堆在Tomcat servlet容器下运行的servlet。 我想将测试代码与生产代码分开,因此我考虑使用测试框架。 查看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 好的。忽略" tomcat"位并编码到servlet,最好的选择是为响应和请求对象创建模拟,然后告诉它您期望得到的结果。 因此,对于标准的空doPost,并使用EasyMock,您将拥有
然后开始向doPost添加代码。模拟将因为没有期望而失败,然后您可以从那里设置期望。 请注意,如果要对类使用EasyMock,则必须使用EasyMock类扩展库。但是从那以后它将以相同的方式工作。 将处理HTTP请求和响应的代码部分与进行业务逻辑或数据库操作的部分分开。在大多数情况下,这将产生一个三层体系结构,分别具有数据层(用于数据库/持久性),服务层(用于业务逻辑)和表示层(用于HTTP请求和响应)。 对于"容器内"测试,请查看仙人掌 如果您希望在没有运行容器的情况下进行测试,则可以使用自己的模拟对象(例如,使用EasyMock)模拟其组件,也可以尝试使用具有"预定义"存根的MockRunner,以测试servlet,jdbc-connections等。 2018年2月更新:OpenBrace Limited已关闭,并且不再支持其ObMimic产品。 如果您想要ServletUnit的更新替代品来进行Servlet的JUnit测试,您可能会发现我公司的ObMimic库很有用。可从网站的下载页面免费获得。 与ServletUnit一样,它提供了一个类库,您可以在任何servlet容器之外的常规JUnit或TestNG测试中使用这些类来模拟Servlet API。 它的Servlet API对象具有无参数的构造函数,对于所有相关的Servlet API数据和设置都是完全可配置和可检查的,并提供了Servlet API的javadoc指定的所有行为的完整模拟。为了帮助进行测试,支持选择性记录Servlet API调用,控制任何与容器相关的行为,检查任何歧义调用(即未完全定义Servlet API行为的地方)以及针对任何内容的内存内JNDI模拟依靠JNDI查找的servlet代码。 有关完整的详细信息,示例代码,"操作方法"指南,Javadoc等,请访问网站。 |