java开发常遇到的问题

对于增删改方法的单元测试,推荐使用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导出数据集的“第一行”问题,这里有详细的描述

喜欢就喜欢了,心被牵动,无须理由,爱上你是我的自由,

java开发常遇到的问题

相关文章:

你感兴趣的文章:

标签云: