相信做过单元测试的人都会对JUnit非常的熟悉了,今天要介绍的DbUnit(http://dbunit.sourceforge.net/)则是专 门针对数据库测试的对JUnit的一个扩展,它可以将测试对象数据库置于一个测试轮回之间的状态。鉴于目前国内介绍DbUnit的系统教程比较少见,本文 将分从理论和实例两个方面带你领略DbUnit的精彩世界。
DbUnit设计理念
熟悉单元测试的开发人员都知道,在对数据库进行单元测试时候,通常采用的方案有运用模拟对象(mock objects)和stubs两种。通过隔离关联的数据库访问类,比如JDBC的相关操作类,来达到对数据库操作的模拟测试。然而某些特殊的系统,比如利 用了EJB的CMP(container-managed persistence)的系统,数据库的访问对象是在最底层而且很隐蔽的,那么这两种解决方案对这些系统就显得力不从心了。
DBUnit的设计理念就是在测试之前,备份数据库,然后给对象数据库植入我们需要的准备数据,最后,在测试完毕后,读入备份数据库,回溯到测试前的状态;
而且又因为DBUnit是对JUnit的一种扩展,开发人员可以通过创建测试用例代码,在这些测试用例的生命周期内来对数据库的操作结果进行比较。
DbUnit测试基本概念和流程
基于DbUnit 的测试的主要接口是IDataSet。IDataSet代表一个或多个表的数据。
可以将数据库模式的全部内容表示为单个IDataSet 实例。这些表本身由Itable 实例来表示。
IDataSet 的实现有很多,每一个都对应一个不同的数据源或加载机制。最常用的几种 IDataSet实现为:
FlatXmlDataSet:数据的简单平面文件 XML 表示
QueryDataSet:用 SQL 查询获得的数据
DatabaseDataSet:数据库表本身内容的一种表示
XlsDataSet :数据的excel表示
一般而言,使用DbUnit进行单元测试的流程如下:
1 根据业务,做好测试用的准备数据和预想结果数据,通常准备成xml格式文件。
2 在setUp()方法里边备份数据库中的关联表。
3 在setUp()方法里边读入准备数据。
4 对测试类的对应测试方法进行实装:执行对象方法,把数据库的实际执行结果和预想结果进行比较。
5 在tearDown()方法里边,把数据库还原到测试前状态。
DbUnit开发实例
下面通过一个实例来说明DbUnit的实际运用。
实例准备
比如有一个学生表[student],结构如下:
id char(4) pk 学号
name char(50) 姓名
sex char(1) 性别
birthday date 出生日期
准备数据如下:
id name sex birthday
0001 翁仔 m 1979-12-31
0002 王翠花 f 1982-08-09
测试对象类为StudentOpe.java,里边有2个方法:
findStudent(String id) :根据主键id找记录
addStudent(Student student) :添加一条记录
在测试addStudent方法时候,我们准备添加如下一条数据
id name sex birthday
0088 王耳朵 m 1982-01-01
那么在执行该方法后,数据库的student表里的数据是这样的:
id name sex birthday
0001 翁仔 m 1979-12-31
0002 王翠花 f 1982-08-09
0088 王耳朵 m 1982-01-01
然后我们说明如何对这2个方法进行单元测试。
实例展开
1 把准备数据和预想数据转换成xml文件
student_pre.xml
student_exp.xml
2 实装setUp方法,详细见代码注释。
3 实装测试方法,详细见代码注释。
*检索类方法,可以利用assertEquals()方法,拿表的字段进行比较。
*更新,添加,删除等方法,可以利用Assertion.assertEquals()方法,拿表的整体来比较。
*如果在整体比较表的时候,有个别字段不需要比较,可以用DefaultColumnFilter.excludedColumnsTable()方法,
将指定字段给排除在比较范围之外。比如上例中不需要比较birthday这个字段的话,那么可以如下代码所示进行处理:
4 在tearDown()方法里边,把数据库还原到测试前状态
最后
无疑,使用DbUnit能够极大的提高数据库测试的效率,希望通过本文能够让您掌握这一数据库测试的利器
分享到:
相关推荐
一个很好的DBUnit的例子 博文链接:https://virgoooos.iteye.com/blog/186859
NULL 博文链接:https://lgstarzkhl.iteye.com/blog/617553
DbUnit(http://dbunit.sourceforge.net/)则是专 门针对数据库测试的对JUnit的一个扩展, 它可以将测试对象数据库置于一个测试轮回之间的状态。 这个是主要jar包
从http://www.dbunit.org/apidocs/index.html下载的HTML,然后自己制作的CHM,很辛苦,所以要2分吧~
要使用 DbUnit,首先需要从 http://dbunit.sourceforge.net 上下载 JAR 文件,将此 JAR 文件放在集成开发环境或构建脚本的类路径中,并且需要有数据库的 JDBC 驱动程序。在类路径上还需要阅读 ...
dbunit是一个基于junit扩展的数据库测试框架。...更多资源详见: http://blog.csdn.net/fanxiaobin577328725/article/details/51894331 (包含图书各部分和随书源码,还有其它资源的详细下载地址)
则可以将DbUnit作为开发时的依赖项添加到项目中:$ composer require --dev phpunit / dbunit PHP存档(PHAR)可以下载DbUnit的PHAR: $ wget https://phar.phpunit.de/dbunit.phar下面的示例显示如何配置PHPUnit以...
这个HTML版的帮助文档是从官方站点`http://www.dbunit.org/apidocs/index.html`获取的,包含了DBUnit的所有核心功能和用法的详细说明。虽然没有以常见的CHM(Compiled Help Manual)格式提供,但这个HTML压缩包依然...
API 文档(http://www.dbunit.org/apidocs/index.html)是 DBUnit 使用的关键资源,其中详细列出了所有类、接口和方法,包括: - `IDatabaseConnection` 接口:表示与数据库的连接,提供创建 Dataset 和执行 SQL ...
**DbUnit 入门指南** DbUnit 是一个用于数据库测试的开源 Java 工具,它提供了数据驱动测试的框架,可以有效地管理和填充测试数据库。在软件开发中,尤其是在进行单元测试时,确保数据库状态的一致性至关重要。...
import org.dbunit.dataset.xml.FlatXmlDataSet; import org.dbunit.operation.DatabaseOperation; import javax.sql.DataSource; import java.io.InputStream; public class MyDatabaseTest { @Rule public ...
DBUnit 是一个开源的 Java 库,专门用于数据库测试,它是 xUnit 测试框架(如 JUnit)的一个扩展。在数据库驱动的项目中,DBUnit 可以帮助开发者确保数据库状态的一致性,使得测试更加可靠。DBUnit 2.4.7 版本包含了...
NDbUnit 是一个.NET框架,它是DbUnit的扩展,专门针对.NET环境进行了优化。DbUnit 是一个Java测试框架,用于数据库的单元测试,而NDbUnit则是.NET开发者进行数据库集成测试的重要工具。本文将深入探讨NDbUnit的基本...
import org.dbunit.dataset.xml.FlatXmlDataSet; import org.junit.*; import javax.sql.DataSource; public class DBUnitTest { private IDatabaseConnection connection; private IDataSet expectedDataSet; ...
DbUnit 入门实战 DbUnit 是一个专门针对数据库测试的 JUnit 扩展,它可以将测试对象数据库置于一个测试轮回之间的状态。DbUnit 的设计理念是,在测试之前,备份数据库,然后给对象数据库植入我们需要的准备数据,...
lotaris-dbunit-maven-plugin 用于创建/删除域、部署应用程序和管理资源的插件。用法将以下依赖项放入您的 pom.xml < plugin>< groupId>com.lotaris.maven.plugins</ groupId>< artifactId>lotaris-dbunit-maven-...
import org.dbunit.dataset.IDataSet; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org....