对于最新稳定版本,请使用 Spring Framework 7.0.6spring-doc.cadn.net.cn

使用 Web Mock

为了提供全面的 Web 测试支持,TestContext 框架默认启用了 ServletTestExecutionListener。当针对 WebApplicationContext进行测试时,此 TestExecutionListener 会在每个测试方法执行前使用 Spring Web 的 RequestContextHolder 设置默认的线程局部状态,并基于通过 @WebAppConfiguration 配置的基础资源路径创建一个 MockHttpServletRequest、一个 MockHttpServletResponse 和一个 ServletWebRequestServletTestExecutionListener 还确保 MockHttpServletResponseServletWebRequest 可以被注入到测试实例中, 并且在测试完成后清理线程局部状态。spring-doc.cadn.net.cn

一旦为您的测试加载了 WebApplicationContext,您可能会发现需要与 Web 模拟对象(mocks)进行交互——例如,用于设置测试夹具(test fixture),或在调用 Web 组件后执行断言。以下示例展示了哪些模拟对象可以自动注入到您的测试实例中。请注意,WebApplicationContextMockServletContext 在整个测试套件中是被缓存的,而其他模拟对象则由 ServletTestExecutionListener 按测试方法进行管理。spring-doc.cadn.net.cn

@SpringJUnitWebConfig
class WacTests {

	@Autowired
	WebApplicationContext wac; // cached

	@Autowired
	MockServletContext servletContext; // cached

	@Autowired
	MockHttpSession session;

	@Autowired
	MockHttpServletRequest request;

	@Autowired
	MockHttpServletResponse response;

	@Autowired
	ServletWebRequest webRequest;

	//...
}
@SpringJUnitWebConfig
class WacTests {

	@Autowired
	lateinit var wac: WebApplicationContext // cached

	@Autowired
	lateinit var servletContext: MockServletContext // cached

	@Autowired
	lateinit var session: MockHttpSession

	@Autowired
	lateinit var request: MockHttpServletRequest

	@Autowired
	lateinit var response: MockHttpServletResponse

	@Autowired
	lateinit var webRequest: ServletWebRequest

	//...
}