我有一个DAO类的测试,我使用DBUnit来创建和填充数据库(使用内存中的derby)。 我在测试dao更新方法时遇到问题,因为它修改数据,然后其他测试失败。正如我们所有人都知道测试应该独立于其他任何测试,并且我知道DBUnit在每次测试后都有一些工具可以清理和重新生成数据库。 但它不起作用!DBUnit没有清理并在每种方法之后插入数据库,所以测试不是独立的
的代码是这样的(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);
}
这是测试(禁用,以避免附带效果):
@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());
}
你能否提供一些信息?您的cleanAndPopulate()方法是否执行? – chkal