java – DBUnit不清理并在每个方法之后插入数据库,因此测试不是
发布时间:2020-12-14 05:52:49 所属栏目:Java 来源:网络整理
导读:我有一个DAO类的测试,我使用DBUnit来创建和填充数据库(使用内存中的德比). 我在测试dao update方法时遇到问题,因为它修改数据然后另一个测试失败.因为我们所有人都知道测试应该独立于任何其他测试,并且我知道DBUnit在每次测试后都有一些清理和重新生成数据库
我有一个DAO类的测试,我使用DBUnit来创建和填充数据库(使用内存中的德比).
我在测试dao update方法时遇到问题,因为它修改数据然后另一个测试失败.因为我们所有人都知道测试应该独立于任何其他测试,并且我知道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()); } 解决方法
这是因为CLEAN_INSERT在测试之前“清洁”,而不是在测试之后.
例如,如果有两个测试,test1和test2. test1和test2分别从test1.xml和test2.xml填充表. test1.xml就像 <dataset> <table1 ... /> <table2 ... /> </dataset> test2.xml就好 <dataset> <table1 ... /> </dataset> 当测试的顺序是test1然后是test2时,CLEAN_INSERT将执行以下操作: >从table2中删除所有内容 因此,当执行test2时,table1包含来自test2.xml的数据,这正是我们所期望的.但是table2仍然包含test1的数据,这可能会导致一些问题. 解决方法是在所有xml文件中为每个表创建一个空行.它将确保在插入之前清除所有表格. 对于上面的例子, test1.xml会是这样的 <dataset> <table1 ... /> <table2 ... /> <table1 /> <table2 /> </dataset> test2.xml就好 <dataset> <table1 ... /> <table1 /> <table2 /> </dataset> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |