单元测试---dbunit数据集的选择与使用

对于增删改方法的单元测试,推荐使用dbunit+springtestdbunit的方式编写单元测试。

我们使用connection.createDataSet()生成IDataSet对象,利用IDataSet对象生成我们需要的数据集文件,

dbunit支持多种数据集,查看dbunit.jar源码可以看到,在org.dbunit.dataset包下,有生成数据集的工具

类,

dbunit支持以下几种常用的数据集:

  • csv格式 使用csv/CsvDataSetWriter生成数据集
  • excel 使用excel/XlsDataSet生成数据集
  • xml 使用xml/XmlDataSet生成数据集
  • flatxml 使用xml/FlatXmlDataSet生成数据集

导出数据集可参考下面代码,(除了导出数据集,我们还可以导出表结构的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 file
        FlatDtdDataSet.write(fullDataSet, new FileOutputStream("D:/dev/source/test.dtd"));

        // write flatxml database export
        FlatXmlDataSet.write(fullDataSet, new FileOutputStream("D:/dev/source/full_flat.xml"));

        // write xml database export
        XmlDataSet.write(fullDataSet, new FileOutputStream("D:/dev/source/full_xml.xml"));

        //write csv database export
        CsvDataSetWriter.write(fullDataSet,new File("D:/dev/source/full_csv"));

        //write excel database export
        XlsDataSet.write(fullDataSet, new FileOutputStream("D:/dev/source/full_excel.xls"));

dbunit默认使用的数据集是FlatXmlDataSet,springtestdbunit基于dbunit,所以也是如此,

springtestdbunit默认使用的是com.github.springtestdbunit.dataset.FlatXmlDataSetLoader进行数据集

的载入,下一篇文章中,我会对使用springtestdbunit及载入数据进行说明。

FlatXmlDataSet对应的XML例如:

<dataset>
    <Person Name="Jade" Age="30"/>    <Person Name="Kirin" Age="31" Location="Beijing"/>
</dataset>

使用这种数据集有一个问题:如果数据库中某一条字段为null,在flat XML中将不会显示该attribute。

FlatXmlDataSet用XML文件中该表的第一行数据来制定表的结构。因此,如果数据库中某个字段所有记录不

都为null,但恰巧第一条记录为null,那么这个字段插入后将会全部为空,因为第一行指定的表结构中没有这

个字段。例如上面的XML文件,第一条的Location为null,第二条有值,但是,导入数据库后,数据库中两

条记录的Location字段全部为null。有很多人说,只要把不为空的记录放到第一行就可以了,我觉得这并不

是最好的解决办法,因为这需要我们费力去寻找一条所有字段都有值的记录,并且如果表里没有这种记录

呢,比如表里有这样两个字段,一个字段为空另一个字段就一定有值,另一个字段为空,这个字段才有值,

如果存在这种互异的字段,那么数据集的导入便完全无法正确的进行了,使用flat xml插入后的数据一定有一

列全部为空。解决办法是不使用默认的FlatXml数据集,可以尝试使用其他三种,我们这里使用XmlDataSet

演示,其他两种,读者可自行测试。

使用XmlDataSet生成的XML文件如下所示:

<dataset>
  <table name="Person">
    <column>Name</column>
    <column>Age</column>
    <column>Location</column>
    <row>
      <value>Jade</value>
      <value>30</value>
       <null/>
    </row>
    <row>
      <value>Kirin</value>
      <value>31</value>
      <value>Beijing</value>
    </row>
  </table>
</dataset>

附:

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。