Working with Web Mocks
To provide comprehensive web testing support, the TestContext framework has a
ServletTestExecutionListener that is enabled by default. When testing against a
WebApplicationContext, this TestExecutionListener
sets up default thread-local state by using Spring Web’s RequestContextHolder before
each test method and creates a MockHttpServletRequest, a MockHttpServletResponse, and
a ServletWebRequest based on the base resource path configured with
@WebAppConfiguration. ServletTestExecutionListener also ensures that the
MockHttpServletResponse and ServletWebRequest can be injected into the test instance,
and, once the test is complete, it cleans up thread-local state.
Once you have a WebApplicationContext loaded for your test, you might find that you
need to interact with the web mocks — for example, to set up your test fixture or to
perform assertions after invoking your web component. The following example shows which
mocks can be autowired into your test instance. Note that the WebApplicationContext and
MockServletContext are both cached across the test suite, whereas the other mocks are
managed per test method by the 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
//...
}