关于eclipse:单元测试servlet

关于eclipse:单元测试servlet

Unit-testing servlets

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


查看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,您将拥有

1
2
3
4
5
6
7
public void testPost() {
   mockRequest = createMock(HttpServletRequest.class);
   mockResponse = createMock(HttpServletResponse.class);
   replay(mockRequest, mockResponse);
   myServlet.doPost(mockRequest, mockResponse);
   verify(mockRequest, mockResponse);
}

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

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


将处理HTTP请求和响应的代码部分与进行业务逻辑或数据库操作的部分分开。在大多数情况下,这将产生一个三层体系结构,分别具有数据层(用于数据库/持久性),服务层(用于业务逻辑)和表示层(用于HTTP请求和响应)。

  • 您可以对前两层进行单元测试,而根本不需要任何servlet。这样测试起来会更容易。
  • 正如其他人所建议的,您可以使用模拟HTTP请求和响应对象来测试表示层。
  • 最后,如果您确实有必要,则可以使用HtmlUnit或JWebUnit之类的工具进行集成测试。

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

    如果您希望在没有运行容器的情况下进行测试,则可以使用自己的模拟对象(例如,使用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等,请访问网站。


    推荐阅读

      linux下并行运行命令?

      linux下并行运行命令?,系统,服务,工作,命令,环境,网络,暂停,文件,脚本,参数,l

      linux服务器基本命令?

      linux服务器基本命令?,地址,系统,设备,网络,工作,标准,信息,电脑,命令,密码,l

      linux服务器下载命令?

      linux服务器下载命令?,服务,密码,系统,档案,工具,网络,公共,百度,地址,认证,l

      linux进程运行命令?

      linux进程运行命令?,系统,工作,状态,地址,信息,进程,基础,命令,管理,软件,lin

      linux显示运行命令?

      linux显示运行命令?,系统,服务,状态,信息,工具,数据,电脑,标准,管理,时间,如

      linux服务器常用命令?

      linux服务器常用命令?,工作,系统,地址,信息,命令,目录,管理,标准,设备,功能,

      linux运行vim命令?

      linux运行vim命令?,系统,工具,官方网站,模式,基础,数据,代码,环境,入口,命令

      linux监控命令运行?

      linux监控命令运行?,系统,工作,地址,信息,工具,情况,标准,环境,命令,状态,lin

      linux中命令停止运行?

      linux中命令停止运行?,系统,代码,第一,命令,进程,指令,程序,方法,接线,硬盘,l

      linux服务器保存命令?

      linux服务器保存命令?,时间,状态,档案,电脑,命令,信息,位置,编辑,文件,模式,L

      linux服务器扫盘命令?

      linux服务器扫盘命令?,地址,工作,命令,目录,数据,单位,名称,系统,管理,信息,L

      linux命令切换服务器?

      linux命令切换服务器?,地址,名称,系统,环境,实时,命令,服务器,脚本,路径,版

      linux自动运行命令?

      linux自动运行命令?,服务,系统,时间,代码,周期性,第一,命令,管理,在线,状态,l

      linux开启运行命令?

      linux开启运行命令?,系统,服务,工作,管理,状态,命令,标准,情况,环境,工具,lin

      linux运行wps命令?

      linux运行wps命令?,软件,官网,名称,时间,电脑,系统,工具,环境,项目,数据,wps

      linux服务器搭建命令?

      linux服务器搭建命令?,系统,服务,软件,地址,平台,在线,密码,工具,环境,百度,l

      linux运行cmd命令?

      linux运行cmd命令?,电脑,系统,状态,情况,环境,命令,单位,管理,设备,数据,电脑

      服务器重启命令linux?

      服务器重启命令linux?,工作,标准,设备,服务,系统,名称,命令,百度,网络,密码,

      linux运行两个命令?

      linux运行两个命令?,网络,地址,系统,工作,暂停,命令,网站,密码,网上,入口,Lin

      linux服务器删除命令?

      linux服务器删除命令?,系统,服务,管理,情况,命令,工作,互动,地址,软件,较大,l