2.1Mock Objects

Spring包含许多专门用于模拟的包:

  • Environment

  • JNDI

  • Servlet API

  • Spring Web Reactive

2.1.1 Environment

org.springframework.mock.env包中包含Environment和PropertySource抽象的模拟实现(请参阅Bean定义配置文件和PropertySource抽象)。 MockEnvironment和MockPropertySource对于开发依赖于特定于环境的属性的代码的容器外测试非常有用。

2.1.2 JNDI

org.springframework.mock.jndi包中包含JNDI SPI的实现,你可以使用它为测试套件或独立应用程序设置简单的JNDI环境。 例如,如果JDBC DataSource实例在测试代码中绑定到与Java EE容器中相同的JNDI名称,则可以在测试方案中重用应用程序代码和配置而无需修改。

2.1.3 Servlet API

org.springframework.mock.web包中包含一组全面的Servlet API模拟对象,可用于测试Web上下文,控制器和过滤器。 这些模拟对象的目标是使用Spring的Web MVC框架,并且通常比动态模拟对象(例如EasyMock)或替代Servlet API模拟对象(例如MockObjects)更方便使用。

从Spring Framework 5.0开始,org.springframework.mock.web中的模拟对象基于Servlet 4.0 API。

Spring MVC Test框架以模拟Servlet API对象为基础,为Spring MVC提供集成测试框架。 请参阅Spring MVC测试框架。

2.1.4 Spring Web Reactive

org.springframework.mock.http.server.reactive包中包含用于WebFlux应用程序的ServerHttpRequest和ServerHttpResponse的模拟实现。 org.springframework.mock.web.server包中包含一个依赖于那些模拟请求和响应对象的模拟ServerWebExchange。

MockServerHttpRequest和MockServerHttpResponse都从与服务器特定的实现相同的抽象基类扩展,并与它们共享行为。例如,模拟请求一旦创建就是不可变的,但你可以使用ServerHttpRequest中的mutate()方法创建修改后的实例。

为了使模拟响应正确地实现写入合同并返回写入完成句柄(即Mono ),它默认使用带有cache().then()的Flux,它缓冲数据并使其成为可能。可用于测试中的断言。应用程序可以设置自定义写入功能(例如,测试无限流)。

WebTestClient以模拟请求和响应为基础,为不使用HTTP服务器测试WebFlux应用程序提供支持。客户端还可以用于正在运行的服务器的端到端测试。