数据库测试

【已解决】mysql+unitils用@DataSet,抛NoSuchColumnException

≯℡__Kan透↙ 提交于 2019-11-29 01:24:48
是unitils的一个bug。 使用mysql,用@DataSet注入测试数据时,会抛出org.dbunit.dataset.NoSuchColumnException。 起因是新版本的dbunit(目前是2.4.9)细化了各种数据库的MetadataHandler的处理,为每一种数据库提供了一个MetadataHandler,如MySqlMetadataHandler,Db2MetadataHandler等。而unitils并没有升级(快两年没更新了,还会更新吗?),仍然使用dbunit提供的DefaultMetadataHandler。这个DefaultMetadataHandler并不能很好的处理各个数据库之间的不同,所以会导致兼容问题。 有一种解决方案是将dbunit降级成2.4.2版本,虽然能解决这个问题,但是会引入新的问题。如果在数据XML文件中写入同一个表的两条数据,如: <?xml version='1.0' encoding='UTF-8'?> <dataset> <t_role id="1" name="test1" version="0" /> <t_role id="2" name="test2" version="0" /> </dataset> 则会抛出org.dbunit.database.AmbiguousTableNameException

【已解决】unitils使用@DataSet插入测试数据,测试结束后不能回滚

久未见 提交于 2019-11-27 20:49:40
使用@DataSet的时候,unitils使用的事务管理器必须在spring的配置文件中定义。 <bean id="dataSource" class="org.unitils.database.UnitilsDataSourceFactoryBean" /> 否则@DataSet会使用unitils的事务管理,而在测试方法里操作业务DAO会使用spring的事务管理,造成的后果是操作DAO生成的数据可以回滚,但是@DataSet导入的数据不能回滚。 来源: oschina 链接: https://my.oschina.net/u/719192/blog/173642