前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >DBUnit数据库测试

DBUnit数据库测试

作者头像
端碗吹水
发布2020-09-23 10:52:40
9410
发布2020-09-23 10:52:40
举报

DBUnit数据库测试:

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

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

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

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

dffc9c4b762ed1f6634a4b239f6bd2cb.png
dffc9c4b762ed1f6634a4b239f6bd2cb.png

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

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

9e929f5534aae4606aca26da8f55422e.png
9e929f5534aae4606aca26da8f55422e.png

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

57ab9b442b825bf349b76052b85ca9a2.png
57ab9b442b825bf349b76052b85ca9a2.png

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

387eb6b4bad7269a245fb53094609f5e.png
387eb6b4bad7269a245fb53094609f5e.png

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

9be9409cb8319733e1e05536dc1fa31f.png
9be9409cb8319733e1e05536dc1fa31f.png
04d5a8c394efe484ac38c5e44485d8b4.png
04d5a8c394efe484ac38c5e44485d8b4.png
4f34bf0f81c3935a189f8aaccce0d9c7.png
4f34bf0f81c3935a189f8aaccce0d9c7.png
bd59f61b6581bda8c97fb77e15ab42e6.png
bd59f61b6581bda8c97fb77e15ab42e6.png

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

6b16f9a3d4303e3c0f0e8d23321b681f.png
6b16f9a3d4303e3c0f0e8d23321b681f.png
8383425bd8caba3ab7b3497ad2491414.png
8383425bd8caba3ab7b3497ad2491414.png

测试结果:

052cc951a78b6ad3afe06453d8c0df7e.png
052cc951a78b6ad3afe06453d8c0df7e.png

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

536db54d46e92f333b9937b8cafe728d.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
2c85e1fa7286d67273fade6cabf4aa67.png
3ab8d7bce3d4e36e3fab1d0e5aa9650e.png
3ab8d7bce3d4e36e3fab1d0e5aa9650e.png
b319f7b2102c4e1aa61eeb91af9b5b63.png
b319f7b2102c4e1aa61eeb91af9b5b63.png
a1922d1565a2596db214eb930b5aabe0.png
a1922d1565a2596db214eb930b5aabe0.png
9395769da4cf3f8f8a41be4d15db0479.png
9395769da4cf3f8f8a41be4d15db0479.png

测试结果:

1f07957dc622e012f782014e0e2d8300.png
1f07957dc622e012f782014e0e2d8300.png
492d9c15fdc31d44bac1bacdeba544cf.png
492d9c15fdc31d44bac1bacdeba544cf.png

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

22ea53992b09eb55020a24bcefb73898.png
22ea53992b09eb55020a24bcefb73898.png

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

bb81470e9af620a51d0957aa4883a646.png
bb81470e9af620a51d0957aa4883a646.png
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-10-27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档