Spring测试会话范围bean使用Junit

我有一个会话范围的bean,它保存每个http会话的用户数据。我想写一个Junit测试用例来测试会话范围的bean。我想写测试用例,以便它可以证明bean正在创建每个会话。
任何指针如何写这样的Junit测试用例?
最佳答案
为了在单元测试中使用请求和会话范围,您需要:

>在应用程序上下文中注册这些范围
>创建模拟会话和请求
>通过RequestContextHolder注册模拟请求

这样的东西(假设你使用Spring TestContext来运行你的测试):
abstractSessionTest.xml:

<beans ...>
    <bean class="org.springframework.beans.factory.config.CustomScopeConfigurer">
        <property name="scopes">
            <map>
                <entry key="session">
                    <bean class="org.springframework.web.context.request.SessionScope" />
                </entry>
                <entry key="request">
                    <bean class="org.springframework.web.context.request.RequestScope" />
                </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 request
endRequest();
startRequest();
// inside another request of the same session
endRequest();
endSession();

转载注明原文:Spring测试会话范围bean使用Junit - 代码日志