복붙노트

[SPRING] Junit을 사용하여 Spring 테스트 세션 범위 bean

SPRING

Junit을 사용하여 Spring 테스트 세션 범위 bean

HTTP 세션 당 사용자 데이터를 보유하는 세션 범위 bean이 있습니다. Session scope bean을 테스트하기 위해 Junit 테스트 케이스를 작성하고 싶다. 빈이 세션 당 생성된다는 것을 증명할 수 있도록 테스트 케이스를 작성하고 싶습니다. 그러한 Junit 테스트 케이스를 작성하는 방법에 대한 모든 포인터?

해결법

  1. ==============================

    1.단위 테스트에서 요청 및 세션 범위를 사용하려면 다음을 수행해야합니다.

    단위 테스트에서 요청 및 세션 범위를 사용하려면 다음을 수행해야합니다.

    다음과 같은 것 (테스트를 실행하기 위해 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();
    
  2. ==============================

    2.나는이 간단한 접근법을 접했고, 다른 사람들이 필요로 할 수 있도록 여기에 게시 할 수있을 것이라고 생각했습니다.

    나는이 간단한 접근법을 접했고, 다른 사람들이 필요로 할 수 있도록 여기에 게시 할 수있을 것이라고 생각했습니다.

    <bean class="org.springframework.beans.factory.config.CustomScopeConfigurer">
        <property name="scopes">
            <map>
                <entry key="session">
                    <bean class="org.springframework.context.support.SimpleThreadScope"/>
                </entry>
            </map>
        </property>
    </bean>
    

    이 방법을 사용하면 요청 / 세션 객체를 조롱 할 필요가 없습니다.

    출처 : http://tarunsapra.wordpress.com/2011/06/28/junit-spring-session-and-request-scope-beans/

  3. ==============================

    3.Spring 3.2 및 그 이후 버전은 통합 테스팅을위한 세션 / 요청 범위 Bean 지원

    Spring 3.2 및 그 이후 버전은 통합 테스팅을위한 세션 / 요청 범위 Bean 지원

    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(classes = TestConfig.class)
    @WebAppConfiguration
    public class SampleTest {
    
        @Autowired WebApplicationContext wac;
    
        @Autowired MockHttpServletRequest request;
    
        @Autowired MockHttpSession session;    
    
        @Autowired MySessionBean mySessionBean;
    
        @Autowired MyRequestBean myRequestBean;
    
        @Test
        public void requestScope() throws Exception {
            assertThat(myRequestBean)
               .isSameAs(request.getAttribute("myRequestBean"));
            assertThat(myRequestBean)
               .isSameAs(wac.getBean("myRequestBean", MyRequestBean.class));
        }
    
        @Test
        public void sessionScope() throws Exception {
            assertThat(mySessionBean)
               .isSameAs(session.getAttribute("mySessionBean"));
            assertThat(mySessionBean)
               .isSameAs(wac.getBean("mySessionBean", MySessionBean.class));
        }
    }
    

    참고 문헌 :

  4. from https://stackoverflow.com/questions/5136944/spring-test-session-scope-bean-using-junit by cc-by-sa and MIT license