为了在单元测试中使用请求和会话范围,您需要:
- 在应用程序上下文中注册这些范围
- 创建模拟会话并请求
- 通过注册模拟请求
RequestContextHolder
这样的事情(假设您使用Spring TestContext运行测试)
abstractSessionTest.xml:
<beans ...> <bean > <property name="scopes"> <map> <entry key="session"> <bean /> </entry> <entry key="request"> <bean /> </entry> </map> </property> </bean></beans>
。
@ContextConfiguration("abstractSessionTest.xml")public abstract class AbstractSessionTest { protected MockHttpSession session; protected MockHttpServletRequest request; protected void startSession() { session = new MockHttpSession(); } protected void endSession() { session.clearAttributes(); session = null; } protected void startRequest() { request = new MockHttpServletRequest(); request.setSession(session); RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(request)); } protected void endRequest() { ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).requestCompleted(); RequestContextHolder.resetRequestAttributes(); request = null; }}现在,您可以在测试代码中使用以下方法:
startSession();startRequest();// inside requestendRequest();startRequest();// inside another request of the same sessionendRequest();endSession();



