Spring包含许多专门用于模拟的包:
org.springframework.mock.env包中包含Environment和PropertySource抽象的模拟实现(请参阅Bean定义配置文件和PropertySource抽象)。 MockEnvironment和MockPropertySource对于开发依赖于特定于环境的属性的代码的容器外测试非常有用。
org.springframework.mock.jndi包中包含JNDI SPI的实现,你可以使用它为测试套件或独立应用程序设置简单的JNDI环境。 例如,如果JDBC DataSource实例在测试代码中绑定到与Java EE容器中相同的JNDI名称,则可以在测试方案中重用应用程序代码和配置而无需修改。
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测试框架。
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应用程序提供支持。客户端还可以用于正在运行的服务器的端到端测试。