En una prueba JUnit en mi aplicación Spring, me gustaría insertar una gran cantidad de datos en un método de configuración, y luego usarlo para probar en contra. Sin embargo, lo que se hace en el método @Before
parece que revertirse después de cada prueba, incluso si anoto el método con @Rollback(false)
@Rollback (falso) no funciona en @Antes de usar SpringJUnit4ClassRunner
Aquí hay una versión simplificada de lo que estoy tratando de hacer:
public class TestClass
{
@Autowired
MyService service;
@Before
public void setup()
{
if(service.getById(1) == null)
{
Thing thing = new Thing();
thing.setId(1);
service.create(new Thing(1))
}
}
}
También intenté usar @BeforeClass
, pero eso requiere que el método sea estático y se ejecute antes de invocar cualquier método @Autowired
setter, por lo que no puedo acceder a los servicios a los que debo llamar cuando se ejecuta @BeforeClass
.
Intenté usar @PostConstruct
, pero existen problemas para tener una transacción disponible (y mi configuración es tal que una sesión de Hibernate solo está disponible cuando se inicia una transacción). Extrañamente, parecía que una sesión estaba disponible, pero dos objetos obtenidos dentro de la misma sesión no eran iguales, lo que significaba que la memoria caché de primer nivel de Hibernate parecía estar fallando, o que cada operación estaba ocurriendo en una sesión separada. @BeforeTransaction
parecían exhibir el mismo comportamiento.
¿Dónde pones la anotación '@ Rollback', a nivel de clase o método? – Ralph
@Ralph He intentado ambos en el método 'setup()' '@Rollback (false)', y luego también en la clase al mismo tiempo que anoto métodos de prueba con '@ Rollback'. –
¿Alguna vez encontró una manera de lograr esto? – Arjan