La primavera Prueba ámbito de la sesión de frijol utilizando Junit

Tengo un ámbito de sesión bean, el cual contiene los datos del usuario por sesión http. Me gustaría escribir un Junit caso de prueba para probar la sesión en el ámbito de frijol. Me gustaría escribir los casos de prueba que pueda demostrar que los frijoles estén siendo creado por sesión.
Cualquier puntero como la forma de escribir de prueba de Junit caso?

InformationsquelleAutor Shamik | 2011-02-27

3 Kommentare

  1. 30

    Con el fin de solicitud de uso de la sesión y de los ámbitos en la unidad de prueba que usted necesita:

    • registrar estos ámbitos en el contexto de la aplicación
    • crear simulacro de sesión y solicitar
    • registro de simulacros de solicitud a través de RequestContextHolder

    Algo como esto (se supone que utilice la Primavera TestContext para ejecutar las pruebas):
    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;
        }
    }

    Ahora usted puede utilizar estos métodos en el código de prueba:

    startSession();
    startRequest();
    //inside request
    endRequest();
    startRequest();
    //inside another request of the same session
    endRequest();
    endSession();
    • Gracias por la detallada explicación. Muy útil.
  2. 30

    Me encontré con este enfoque más sencillo, pensé que bien podría publicar aquí en el caso de que otros necesitan.

    <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>

    Con este enfoque, usted no tiene que burlarse de cualquier solicitud/objetos de sesión.

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

    • Lo mismo se aplica a la ‘petición’ ámbito de aplicación, sólo tiene que utilizar la tecla=’solicitud’ para el ámbito de petición de frijoles.
  3. 11

    Primavera 3.2 y posteriores proporciona apoyo para la sesión/ámbito de petición de frijoles para la prueba de integración

    @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));
        }
    }

    Referencias:

    • Después de la adición de WebAppConfiguration tuve una initializationError error que he solucionado añadiendo el servlet api para el pom archivo como se indica aquí: nickebbitt.wordpress.com/2013/12/20/…
    • Tipp: no use \@WebAppConfiguration en combinación con \@IntegrationTest. No me funciona

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea