Ho un test per una classe DAO, utilizzo DBUnit per creare e popolare il database (utilizzando un derby in memoria). Sono in difficoltà durante il test del metodo di aggiornamento dao perché modifica i dati e quindi l'altro test ha esito negativo. Come tutti sappiamo, un test dovrebbe essere indipendente da qualsiasi altro, e so che DBUnit ha alcune strutture per pulire e rigenerare il database dopo ogni test. Ma non funziona!DBUnit non pulisce e inserisce il database dopo ogni metodo, quindi il test non è indipendente
Il codice è questo (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);
}
Questa è la prova (disabilitato per evitare gli effetti collaterali):
@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());
}
Potrebbe fornire ulteriori informazioni? Il tuo metodo cleanAndPopulate() è eseguito o no? – chkal