使用 Web Mock
为了提供全面的 Web 测试支持,TestContext framework 默认启用了一个 ServletTestExecutionListener。针对 WebApplicationContext 进行测试时,这个 TestExecutionListener 在每个测试方法执行前使用 Spring Web 的 RequestContextHolder 设置默认的线程本地状态,并根据通过 @WebAppConfiguration 配置的基础资源路径创建 MockHttpServletRequest、MockHttpServletResponse 和 ServletWebRequest。ServletTestExecutionListener 还确保 MockHttpServletResponse 和 ServletWebRequest 可以注入到测试实例中,并且在测试完成后清理线程本地状态。
一旦为测试加载了 WebApplicationContext,你可能需要与 Web Mock 交互 — 例如,设置测试夹具或在调用 Web 组件后执行断言。下面的示例展示了哪些 Mock 可以自动装配到测试实例中。请注意,WebApplicationContext 和 MockServletContext 在整个测试套件中都会被缓存,而其他 Mock 则由 ServletTestExecutionListener 按每个测试方法进行管理。
-
Java
-
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
//...
}