Spring ha admitido beans con alcance a nivel de solicitud y sesión desde versiones anteriores, por lo que puede probar dichos frijoles siguiendo estos pasos:

  • Asegúrese de que WebApplicationContext esté cargado para su prueba anotando su clase de prueba con @WebAppConfiguration.

  • Inyecte una solicitud o sesión simulada en su instancia de prueba y prepare su banco de pruebas en consecuencia.

  • Llame a su componente web que obtuvo del WebApplicationContext configurado (usando inyección de dependencia).

  • Realizar afirmaciones sobre objetos simulados.

El siguiente fragmento de código muestra la configuración XML para el caso de uso de inicio de sesión. Tenga en cuenta que el bean userService depende del bean loginAction, cuyo alcance es el nivel de solicitud. Además, se crea una instancia LoginAction usando expresiones SpEL que reciben nombre de usuario y contraseña. De la solicitud HTTP actual. En nuestra prueba, necesitamos configurar estos parámetros de solicitud a través de un objeto simulado administrado por el marco TestContext. El siguiente listado muestra la configuración para este caso de uso:

Configuración de un bean cuyo alcance es el nivel de solicitud
<beans>
    <bean id="userService" class="com.example.SimpleUserService"
            c:loginAction-ref="loginAction"/>
    <bean id="loginAction" class="com.example.LoginAction"
            c:nombredeusuario="#{request.getParameter('usuario')}"
            c:contraseña="#{request.getParameter('pswd')}"
            alcance="solicitud">
        <aop:scoped-proxy/>
    </frijol>
</beans>

En RequestScopedBeanTests inyectamos UserService (es decir, el objeto bajo prueba) y MockHttpServletRequest en nuestra instancia de prueba. En el método de prueba requestScope(), configuramos nuestro banco de pruebas configurando los parámetros de solicitud en el MockHttpServletRequest proporcionado. Si se llama al método loginUser() en nuestro userService, nos aseguraremos de que el servicio especial tenga acceso al bean loginAction de nivel de solicitud para el MockHttpServletRequest actual (es decir, aquel en el que acabamos de configurar los parámetros). Luego puede hacer afirmaciones sobre los resultados basándose en las entradas conocidas para el nombre de usuario y la contraseña. La siguiente lista muestra cómo hacer esto:

Java
@SpringJUnitWebConfig
clase RequestScopedBeanTests {
    @Autowired UserService servicio de usuario;
    @Autowired Solicitud MockHttpServletRequest;
    @Prueba
    Ámbito de solicitud nulo() {
        request.setParameter("usuario", "enigma");
        request.setParameter("pswd", "$pr!ng");
        Resultados de LoginResults = userService.loginUser();
        //confirmar los resultados
    }
}
Kotlin
@SpringJUnitWebConfig
clase RequestScopedBeanTests {
    @Autowired lateinit var servicio de usuario: Servicio de usuario
    @Autowired solicitud var lateinit: MockHttpServletRequest
    @Prueba
    divertido requestScope() {
        request.setParameter("usuario", "enigma")
        request.setParameter("pswd", "\$pr!ng")
        resultados val = userService.loginUser()
        //confirmar los resultados
    }
}

El siguiente fragmento de código es similar a lo que vimos anteriormente para un bean cuyo alcance es el nivel de solicitud. Sin embargo, esta vez el bean userService depende del bean userPreferences, cuyo alcance es a nivel de sesión. Tenga en cuenta que se crea una instancia del bean UserPreferences mediante una expresión SpEL que recupera el tema de la sesión HTTP actual. En nuestra prueba, necesitamos configurar un tema en una sesión simulada administrada por el marco TestContext. El siguiente ejemplo muestra cómo hacer esto:

Configuración de un bean incluido en el ámbito de nivel de sesión
<beans>
    <bean id="userService" class="com.example.SimpleUserService"
            c:userPreferences-ref="userPreferences" />
    <bean id="userPreferences" class="com.example.UserPreferences"
            c:theme="#{session.getAttribute('tema')}"
            alcance="sesión">
        <aop:scoped-proxy/>
    </frijol>
</beans>

En SessionScopedBeanTests inyectamos UserService y MockHttpSession en nuestra instancia de prueba. En el método de prueba sessionScope(), configuramos nuestro banco de pruebas estableciendo el atributo theme esperado en el MockHttpSession proporcionado. Si se llama al método processUserPreferences() en nuestro userService, nos aseguraremos de que el servicio personalizado tenga acceso al bean userPreferences con ámbito de sesión para el MockHttpSession actual y podemos hacer afirmaciones sobre los resultados en función del tema configurado. El siguiente ejemplo muestra cómo hacer esto:

Java
@SpringJUnitWebConfig
clase SessionScopedBeanTests {
    @Autowired UserService servicio de usuario;
    @Autowired sesión MockHttpSession;
    @Prueba
    void sessionScope() lanza una excepción {
        session.setAttribute("tema", "azul");
        Resultados resultados = userService.processUserPreferences();
        //confirmar los resultados
    }
}
Kotlin
@SpringJUnitWebConfig
clase SessionScopedBeanTests {
    @Autowired lateinit var servicio de usuario: Servicio de usuario
    @Autowired lateinit var sesión: MockHttpSession
    @Prueba
    divertido ámbito de sesión() {
        session.setAttribute("tema", "azul")
        resultados val = userService.processUserPreferences()
        //confirmar los resultados
    }
}