使用 Web 模拟

为了提供全面的 Web 测试支持,TestContext 框架默认启用了 ServletTestExecutionListener。在针对 WebApplicationContext 进行测试时,此 TestExecutionListener 使用 Spring Web 的 RequestContextHolder 在每个测试方法之前设置默认的线程本地状态,并根据使用 @WebAppConfiguration 配置的基准资源路径创建 MockHttpServletRequestMockHttpServletResponseServletWebRequestServletTestExecutionListener 还确保可以将 MockHttpServletResponseServletWebRequest 注入到测试实例中,并且在测试完成后,它会清理线程本地状态。

在为测试加载了 WebApplicationContext 后,您可能会发现需要与 Web 模拟进行交互,例如,设置测试夹具或在调用 Web 组件后执行断言。以下示例显示了哪些模拟可以自动注入到您的测试实例中。请注意,WebApplicationContextMockServletContext 在整个测试套件中都已缓存,而其他模拟则由 ServletTestExecutionListener 按测试方法进行管理。

  • 注入模拟

  • Kotlin

@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

	//...
}