Tengo un bean de ámbito de sesión que contiene datos de usuario por sesión http. Me gustaría escribir un caso de prueba de Junit para probar el bean con ámbito de la sesión. Me gustaría escribir el caso de prueba para que pueda probar que los beans se están creando por sesión. Cualquier puntero como la forma de escribir tal caso de prueba Junit?Spring Beans de ámbito de sesión de prueba utilizando Junit
Respuesta
Para utilizar solicitud de sesión y alcances de prueba de unidad es necesario:
- registrar estos ámbitos en el contexto de aplicación
- Crear sesión de simulacro y solicitar
- registro de solicitud de simulacro a través
RequestContextHolder
Algo como esto (suponga que utiliza Spring TestContext para ejecutar sus 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 puede utilizar estos métodos en su código de prueba:
startSession();
startRequest();
// inside request
endRequest();
startRequest();
// inside another request of the same session
endRequest();
endSession();
me encontré con este enfoque más simple, pensé que también podría publicar aquí en caso de que otros lo 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 objeto de solicitud/sesión.
Fuente: http://tarunsapra.wordpress.com/2011/06/28/junit-spring-session-and-request-scope-beans/
Lo mismo se aplica al alcance de 'solicitud', simplemente use key = 'request' para los beans de ámbito de solicitud. – Zeus
Primavera 3.2 y más reciente proporciona soporte para la sesión/petición en ámbito de frijoles para las pruebas 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 agregar WebAppConfiguration tuve un error de initializationError que resolví agregando el servlet-api al archivo pom como se indica aquí: http://nickebbitt.wordpress.com/2013/12/20/spring-3-2-mvc -unit-testing-initializationerror-using-webappconfiguration/ – borjab
Gracias, hizo el truco para mí. –
Sugerencia: no use \ @WebAppConfiguration en combinación con \ @IntegrationTest. No funciona para mi –
- 1. Ejemplificación de simulación automática en una prueba de Spring JUnit
- 2. no prueba unitaria utilizando Spring
- 3. Solución de prueba JSF/Java Beans/Richfaces (JSFUnit, JUnit, etc.)
- 4. ámbito variable de la clase de prueba Junit
- 5. Spring Prototype Beans y beneficios de Spring
- 6. Uso de Scope Scope en Spring Beans
- 7. ¿Cómo obtener todos los beans de ámbito de sesión en JSF 2?
- 8. Utilizando recursos i18n de WEB-INF en la prueba Junit
- 9. Hacer eventos CDI observados en la sesión de beans de respaldo JSF con ámbito
- 10. de beans Spring Autowiring error
- 11. @Transactional Prueba de Spring Junit que no realiza la reversión
- 12. Spring/Hibernate/Junit ejemplo de prueba DAO contra HSQLDB
- 13. Inyección de Dependencia con Spring/Junit/JPA
- 14. Forma correcta de autoautar una sesión de Hibernate en una prueba de la JUnit de la transacción de primavera
- 15. Mockito, JUnit y Spring
- 16. cómo reacoplar singleton Spring beans después de la deserialización
- 17. inyección de prueba Spring + Mockito
- 18. spring junit testing
- 19. Acceso a beans proxy de ámbito dentro de Threads of
- 20. Problemas de rendimiento al usar muchos beans de ámbito de solicitud de AOP
- 21. estado conversacional de beans de sesión
- 22. Spring XML de beans existentes, ¿cómo?
- 23. Cómo acceder al objeto Spring @Service desde la prueba jUnit
- 24. Spring @Transactional no funciona en la prueba JUnit?
- 25. Spring list beans por tipo
- 26. método de prueba junit para getters & setters
- 27. ¿Cuándo se invocará @Predestroy en beans de ámbito prototipo?
- 28. Servidor de prueba con JUnit
- 29. Integre el inicio de sesión único utilizando Spring Security
- 30. Acceso a Spring beans en JerseyTest
Gracias por la explicación detallada. Muy útil. – Shamik