Working with Web Mocks

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

一旦为你的测试加载了一个 WebApplicationContext,你可能会发现需要与 web mock 进行交互——例如,设置你的测试固定装置或在调用你的 web 组件后执行断言。以下示例展示了哪些 mock 可以自动注入到你的测试实例中。请注意,WebApplicationContextMockServletContext 都跨测试套件缓存,而其他 mock 由 ServletTestExecutionListener 按测试方法管理。

  • Injecting mocks

  • 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

	//...
}