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