对于增删改方法的单元测试,推荐使用dbunit+springtestdbunit的方式编写单元测试。
我们使用connection.createDataSet()生成IDataSet对象,利用IDataSet对象生成我们需要的数据集文件,
dbunit支持多种数据集,查看dbunit.jar源码可以看到,在org.dbunit.dataset包下,有生成数据集的工具
类,
dbunit支持以下几种常用的数据集:
导出数据集可参考下面代码,(除了导出数据集,我们还可以导出表结构的DTD文件)
Connection jdbcConnection = DriverManager.getConnection(“jdbc:mysql://localhost:3306/database?useUnicode=true&characterEncoding=utf-8″,”username”, “password”);IDatabaseConnection connection = new DatabaseConnection(jdbcConnection);connection.getConfig().setProperty(DatabaseConfig.PROPERTY_ESCAPE_PATTERN , “`?`”);IDataSet fullDataSet = connection.createDataSet();// write DTD fileFlatDtdDataSet.write(fullDataSet, new FileOutputStream(“D:/dev/source/test.dtd”));// write flatxml database exportFlatXmlDataSet.write(fullDataSet, new FileOutputStream(“D:/dev/source/full_flat.xml”));// write xml database exportXmlDataSet.write(fullDataSet, new FileOutputStream(“D:/dev/source/full_xml.xml”));//write csv database exportCsvDataSetWriter.write(fullDataSet,new File(“D:/dev/source/full_csv”));//write excel database exportXlsDataSet.write(fullDataSet, new FileOutputStream(“D:/dev/source/full_excel.xls”));
dbunit默认使用的数据集是FlatXmlDataSet,springtestdbunit基于dbunit,所以也是如此,
springtestdbunit默认使用的是com.github.springtestdbunit.dataset.FlatXmlDataSetLoader进行数据集
的载入,下一篇文章中,我会对使用springtestdbunit及载入数据进行说明。
FlatXmlDataSet对应的XML例如:
===”Beijing”/></dataset>
使用这种数据集有一个问题:如果数据库中某一条字段为null,在flat XML中将不会显示该attribute。
FlatXmlDataSet用XML文件中该表的第一行数据来制定表的结构。因此,如果数据库中某个字段所有记录不
都为null,但恰巧第一条记录为null,那么这个字段插入后将会全部为空,因为第一行指定的表结构中没有这
个字段。例如上面的XML文件,,第一条的Location为null,第二条有值,但是,导入数据库后,数据库中两
条记录的Location字段全部为null。有很多人说,只要把不为空的记录放到第一行就可以了,我觉得这并不
是最好的解决办法,因为这需要我们费力去寻找一条所有字段都有值的记录,并且如果表里没有这种记录
呢,比如表里有这样两个字段,一个字段为空另一个字段就一定有值,另一个字段为空,这个字段才有值,
如果存在这种互异的字段,那么数据集的导入便完全无法正确的进行了,使用flat xml插入后的数据一定有一
列全部为空。解决办法是不使用默认的FlatXml数据集,可以尝试使用其他三种,我们这里使用XmlDataSet
演示,其他两种,读者可自行测试。
使用XmlDataSet生成的XML文件如下所示:
=>Age>/>>Kirin>Beijing></dataset>
附:
dbunit的使用,可以参考FlatXml导出数据集的“第一行”问题,这里有详细的描述
喜欢就喜欢了,心被牵动,无须理由,爱上你是我的自由,