DBUnit数据库测试

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DBUnit数据库测试相关的知识,希望对你有一定的参考价值。


DBUnit数据库测试:

DBUnit是一个基于junit扩展的数据库测试框架。它提供了大量的类对与数据库相关的操作进行了抽象和封装。它通过使用用户自定义的数据集以及相关操作使数据库处于一种可知的状态,从而使得测试自动化、可重复和相对独立。虽然不用dbunit也可以达到这种目的,但是我们必须为此付出代价(编写大量代码,测试及维护),既然有了这么优秀的开源框架,我们又何必再造轮子。 普通的测试数据库的方法不仅较为麻烦,而且在对数据库测试完后会残留数据在数据库里或者把数据库的数据修改了,相对于普通的测试,dbunit可以将数据库已有的数据保存到xml文件上,以免在对数据库进行测试时破坏里面的数据。 可以直接在Maven工程里下载dbunit依赖包,普通工程的话直接导入jar包到工程环境即可。 Maven工程配置dbunit依赖包示例:

技术分享

我们先单纯用JUnit做一个普通的数据库测试,以此来查看这种测试的弊端。 1.准备一个有些许数据的数据库表格:

技术分享

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

技术分享

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

技术分享

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

技术分享

技术分享

技术分享

技术分享

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

技术分享

技术分享

测试结果:

技术分享

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

技术分享

虽然这种情况可以将表格创建一个副本出来,然后对表格副本进行测试,这样就避免了会破坏表格里的数据,但是这种方法比较麻烦,而且有些情况就是想直接对表格进行测试而不想对副本进行测试,那么就需要使用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步测试类的编写:

技术分享

技术分享

技术分享

技术分享

技术分享

测试结果:

技术分享

技术分享

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

技术分享

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

技术分享


以上是关于DBUnit数据库测试的主要内容,如果未能解决你的问题,请参考以下文章

DBUnit数据库测试

依赖数据库的单元测试——DBUnit

JUnit + DbUnit:在开发和测试环境之间切换数据库连接

Spring Test Dbunit,H2数据库

执行单元测试时如何防止dbunit生成database.script文件

java 使用测试数据集进行DBUnit测试