Tengo una prueba para una clase DAO, utilizo DBUnit para crear y completar la base de datos (utilizando un derby en memoria). Tengo problemas al probar el método de actualización de dao porque modifica los datos y luego falla la otra prueba. Como todos sabemos, una prueba debe ser independiente de cualquier otra, y sé que DBUnit tiene algunas facilidades para limpiar y regenerar la base de datos después de cada prueba. ¡Pero no funciona!DBNo cerrar e insertar la base de datos después de cada método, por lo que las pruebas no son independientes
El código es la siguiente (TestNG):
@BeforeMethod
public void prepareData() throws Exception {
cleanAndPopulate("users");
}
public void cleanAndPopulate (String nameXML) throws Exception {
IDatabaseConnection conn;
conn = new DatabaseConnection (sessionForTesting.connection());
InputStream is = DBconnection.class.getClassLoader()
.getResourceAsStream(nameXML + ".xml");
dataset = new FlatXmlDataSet(is);
System.out.println("*** Preparando base de datos de test");
DatabaseOperation.CLEAN_INSERT.execute(conn, dataset);
}
Esta es la prueba (desactivado para evitar efectos colaterales):
@Test(enabled=false) // Deja la BBDD en estado erroneo!!!
public void busco_y_actualizo() throws Exception {
PacoUser resultado = userdao.getById(1L);
resultado.setName("OTRO");
userdao.update(resultado);
PacoUser resultado2 = userdao.getById(1L);
AssertJUnit.assertNotNull(resultado2);
AssertJUnit.assertEquals("OTRO", resultado2.getName());
}
¿Podría darnos más información? ¿Su método cleanAndPopulate() se ejecuta o no? – chkal