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:
<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:
@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
}
}
@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:
<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:
@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
}
}
@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
}
}
GO TO FULL VERSION