DBUnit数据库测试:

DBUnit是一个基于junit扩展的数据库测试框架。它提供了大量的类对与数据库相关的操作进行了抽象和封装。它通过使用用户自定义的数据集以及相关操作使数据库处于一种可知的状态,从而使得测试自动化、可重复和相对独立。虽然不用dbunit也可以达到这种目的,但是我们必须为此付出代价(编写大量代码,测试及维护),既然有了这么优秀的开源框架,我们又何必再造轮子。

普通的测试数据库的方法不仅较为麻烦,而且在对数据库测试完后会残留数据在数据库里或者把数据库的数据修改了,相对于普通的测试,dbunit可以将数据库已有的数据保存到xml文件上,以免在对数据库进行测试时破坏里面的数据。

可以直接在Maven工程里下载dbunit依赖包,普通工程的话直接导入jar包到工程环境即可。

Maven工程配置dbunit依赖包示例:

dffc9c4b762ed1f6634a4b239f6bd2cb.png



我们先单纯用JUnit做一个普通的数据库测试,以此来查看这种测试的弊端。

1.准备一个有些许数据的数据库表格:

9e929f5534aae4606aca26da8f55422e.png


  2.接着先编写一个Student类,将这个类的属性封装一下,然后再将这个类的属性信息写入输入库:

57ab9b442b825bf349b76052b85ca9a2.png



3.写一个专门的类来得到数据库连接对象

387eb6b4bad7269a245fb53094609f5e.png



4.编写一个类,用于将Student属性数据写入到数据库,这个类具有更新、插入、删除、查询数据的方法:

9be9409cb8319733e1e05536dc1fa31f.png

04d5a8c394efe484ac38c5e44485d8b4.png

4f34bf0f81c3935a189f8aaccce0d9c7.png

bd59f61b6581bda8c97fb77e15ab42e6.png



5.编写测试类,进行测试,在这里我只测试了插入数据方法:

6b16f9a3d4303e3c0f0e8d23321b681f.png

8383425bd8caba3ab7b3497ad2491414.png



测试结果:

052cc951a78b6ad3afe06453d8c0df7e.png


但是这样子数据库会残留测试的数据:

536db54d46e92f333b9937b8cafe728d.png




虽然这种情况可以将表格创建一个副本出来,然后对表格副本进行测试,这样就避免了会破坏表格里的数据,但是这种方法比较麻烦,而且有些情况就是想直接对表格进行测试而不想对副本进行测试,那么就需要使用DBUnit工具,DBUnit有一个DatabaseOperation可以在测试前先将数据库已有的数据保存到xml文件上,然后测试完成之后再将这个xml文件里的数据还原到数据表格里,这样就避免在对数据库进行测试时破坏里面的数据。

先介绍一下DatabaseOperation该类是一个抽象类代表了对数据库的操作,例如CUD以及其组合等, 它采用了退化的工厂模式,可直接通过它获取其具体的子类使用这个类可以在测试完后还原数据库的表格数据

DatabaseOperation

NONE:不执行任何操作,是getTearDownOperation的默认返回值。

UPDATE:将数据集中的内容更新到数据库中。它假设数据库中已经有对应的记录,否则将失败。

INSERT:将数据集中的内容插入到数据库中。它假设数据库中没有对应的记录,否则将失败。

REFRESH:将数据集中的内容刷新到数据库中。如果数据库有对应的记录,则更新,没有则插入。

DELETE:删除数据库中与数据集对应的记录。

DELETE_ALL:删除表中所有的记录,如果没有对应的表,则不受影响。

TRUNCATE_TABLE:DELETE_ALL类似,更轻量级,不能rollback。

CLEAN_INSERT:是一个组合操作,是DELETE_ALL和INSERT的组合。是getSetUpOeration的默认返回值。

 

使用DBUnit工具进行测试:

4步和上面的一样,不同的就在于第5步测试类的编写:

2c85e1fa7286d67273fade6cabf4aa67.png

3ab8d7bce3d4e36e3fab1d0e5aa9650e.png

b319f7b2102c4e1aa61eeb91af9b5b63.png

a1922d1565a2596db214eb930b5aabe0.png

9395769da4cf3f8f8a41be4d15db0479.png


测试结果:

1f07957dc622e012f782014e0e2d8300.png

492d9c15fdc31d44bac1bacdeba544cf.png



xml文件内容,这个文件就是以xml格式来存储数据库表格的数据:

22ea53992b09eb55020a24bcefb73898.png



使用DBUnit工具测试完后,数据库表格里的数据就不会出现测试数据残留或者数据损坏了:

bb81470e9af620a51d0957aa4883a646.png