¿Spring @DirtiesContext vuelve a cargar el contexto de Spring?
Tengo una clase de prueba que parece
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:/test-context.xml"})
@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
public abstract class TestClass {
@Rule @Resource public JUnitRuleMockery jMockContext;
public void test1() {
//Expectations and test
}
public void test2() {
//Expectations and test
}
}
y entest-context.xml
Yo defino elJUnitRuleMockery
además de varios objetos simulados a través de unafactory-method
, me gusta
<bean id="mockContextFactory" class="MockContextFactory" />
<bean id="jMockContext" factory-bean="mockContextFactory" factory-method="getContext" scope="prototype" />
<bean id="firstMock" factory-bean="mockContextFactory" factory-method="getFirstMock" />
<bean id="secondMock" factory-bean="mockContextFactory" factory-method="getSecondMock" />
MockContextFactory
es
public class MockContextFactory
{
private JUnitRuleMockery jUnitRuleMockery;
public MockContextFactory() {
jUnitRuleMockery = new JUnitRuleMockery();
jUnitRuleMockery.setThreadingPolicy(new Synchroniser());
}
public JUnitRuleMockery getContext() {
return jUnitRuleMockery;
}
public FirstMock getFirstMock() {
return jUnitRuleMockery.mock(FirstMock.class);
}
//others getter
}
EnTestClass
Tengo varios métodos de prueba y, debido a las anotaciones.@DirtiesContext
Estoy esperando que el contexto de Spring se vuelva a cargar después de cada ejecución de prueba (ya que cada prueba establece las expectativas en los objetos simulados, tengo que volver a cargar el contexto de Spring cada vez). Ver@DirtiesContext desde aquí. Sin embargo, parece que el contexto Spring no se vuelve a cargar: de hecho, ingresando en el modo de depuración al principio detest2
(según cabe suponertest1
ha sido ejecutado anteriormente) Puedo verjMockContext
aún mantiene las expectativas, la lista de ejecución y los errores (si los hay) detest1
.
Entonces, para terminar con pocas preguntas, hace@DirtiesContext
¿Realmente causo que se recargue el contexto de Spring (como entendí en Spring Docs) o entendí mal la anotación? En el primer caso, ¿qué estoy haciendo mal? En este último caso, ¿cómo puedo obligar a que se vuelva a cargar el contexto Spring para cada prueba?
EDITAR, para delimitar el problema: tuve un código como el de la muestra anterior que se ejecuta desde pocos días, entonces hoy creé una nueva prueba en la que agregué una expectativa que falló. Entonces, vi que todas las otras pruebas en la clase fallaron por la misma razón (mientras quegreen
hasta hoy). Depurando, descubrí quejMockContext
nunca se aprobó, lo que significa que todas las pruebas agregaron expectativas a la misma agrupación: por supuesto, siempre que no haya expectativas fallidas, eso fue transparente y no lo noté (test1
añade y pasa pocas expectativas,test2
toma un conjunto de expectativas que no están vacías YA HA SIDO aprobado y agrega el suyo propio, por lo que no hubo ningún problema), pero no me gusta la situación anterior y me gustaría comenzar cada prueba sin expectativas establecidas previamente.