DBUnit单元测试

DBUnit测试是junit的一个扩展框架,主要用于对于数据库的测试,它的测试原理总体可以分为三步:

一、数据备份  将于测试相关的表备份起来,即将表以XML的形式写入到xml文件中保存起来

二、准备需要测试的数据写入到表中,然后进行相关的测试

三、还原数据  将备份的数据写入到原表中去

与dbunit相关的主要API

IDatabaseConnection   这个是于dbunit相关的数据连接,它是通过java.sql.Connection为参数来获得

IDatabaseConnection con=new  DatabaseConnection(java.sql.Connection);

IDataSet  于dbunit相关的数据集,数据集来源可以是数据库中的表,也可以是xml文件中的数据

IDataSet set=iDatabaseConnection.createDataSet();  //数据表获取

set=new FlatXmlDataSet(new File("src/test/resources/data.xml"));//xml文件中获取

FlatXmlDataSet  可以认为是一个xml文件格式(属性格式的)的数据集类,另外一个与之对应的是XmlDataSet(子元素格式的) 我们经常使用

FlatXmlDataSet.write(set, new FileWriter(new File("src/test/resources/user.xml")));  用于数据备份中,将IDataSet数据集对象set写入到指定的xml文件中去user.xml

属性格式:

<?xml version=‘1.0‘ encoding=‘UTF-8‘?>

<dataset>

<user id="1" name="zhangsan" age="20" sex="男"/>

</dataset>

子元素格式

<?xml version="1.0" encoding="utf-8"?>

<dataset>

<user>

<id>1</id><name>zhangsan</name><age>20</age><sex>男</sex>

</user>

</dataset>

DatabaseOperation  这是一个数据操作类 主要用于对据库中表进行相关的操作,然后插入新的数据

例如:  DatabaseOperation.CLEAN_INSERT.execute(con, set);//表示将与IDatabaseConnextion对象con先关联的表clean然后向表中插入IDataSet对象set。

//DatabaseOperation.DELETE.execute(con, set);   //删除 不插入

// DatabaseOperation.DELETE_ALL.execute(con, set);

//DatabaseOperation.CLEAN_INSERT.execute(con, set); //删除原有的数据 插入数据集中的数据

// DatabaseOperation.INSERT.execute(con, set);  //不删除原有的数据 插入新的数据

实例:

一、数据备份

public void backup()

{

try {

IDatabaseConnection con=new DatabaseConnection(ConnectionUtil.getConnection());

IDataSet set=con.createDataSet();

FlatXmlDataSet.write(set, new FileWriter(new File("src/test/resources/user.xml")));

} catch (DatabaseUnitException e) {

e.printStackTrace();

} catch (SQLException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

二 、测试操作

public void insertUserTest() throws Exception

{

User u=new User("1", "zhangsan", "男", 20);

IDatabaseConnection con=new DatabaseConnection(ConnectionUtil.getConnection());

IDataSet set=new FlatXmlDataSet(new File("src/test/resources/data.xml")); //data.xml中的数据就是一个u

DatabaseOperation.CLEAN_INSERT.execute(con, set);                                        //对象数据

UserManagement um=new UserManagement();

User ut=um.searchUserById("1");

Assert.assertNotNull("ut 为空",ut);

Assert.assertEquals(u.getId(), ut.getId());

Assert.assertEquals(u.getName(), ut.getName());

Assert.assertEquals(u.getAge(), ut.getAge());

Assert.assertEquals(u.getSex(), ut.getSex());

}

三 、还原数据

public void resum() throws Exception

{

IDatabaseConnection con=new DatabaseConnection(ConnectionUtil.getConnection());

IDataSet set=new FlatXmlDataSet(new File("src/test/resources/user.xml"));

DatabaseOperation.CLEAN_INSERT.execute(con, set);

}

在以上实例中我们是备份了相连数据库中的所有的表格,我们也可以只备份与操作相关的表格

public void backupOneTable() throws Exception

{

IDatabaseConnection con=new DatabaseConnection(ConnectionUtil.getConnection());

QueryDataSet qset=new QueryDataSet(con);

qset.addTable("user");  //添加需要被备份的表格的表格名

FlatXmlDataSet.write(qset, new FileWriter(new File("src/test/resources/u.xml")));

}

在每一次进行数据的删除、添加、修改等都需要进行数据的备份与还原,因此我们可以将数据的备份与还原方法使用

@Before和@After注解。

时间: 2024-08-06 20:08:33

DBUnit单元测试的相关文章

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

参考:DbUnit入门教程 http://outofmemory.cn/code-snippet/2640/DbUnit-rumenjiaocheng 依赖数据库的单元测试——DBUnit  https://blog.csdn.net/wudiyong22/article/details/78893613 dbunit使用  http://www.voidcn.com/article/p-xrzigyyl-bb.html 原文地址:https://www.cnblogs.com/highpoin

系统测试——代码质量检查、单元测试、性能测试、自动构建、项目管理

根据软件开发的过程和由细节到外部的顺序,将软件测试划分为5个阶段: 1)代码质量检查:对代码的格式.潜在的Bug进行检查,常用的工具有Checkstyle.PMD.FindBugs: 2)单元测试:对代码的功能进行测试,常用的工具有JUnit.EasyMock: 3)性能测试:对代码的性能进行测试,常用的工具有JMeter.Profiler: 4)自动构建:对代码进行自动构建和持续集成测试.部署,常用的工具有Ant.Maven.CruiseControl: 5)项目管理:对软件测试中的Bug进行

数据库测试DbUnit

DBUnit 的设计理念就是在测试之前,备份数据库,然后给对象数据库植入我们需要的准备数据,最后,在测试完毕后,读入备份数据库,回溯到测试前的状态: 摘自:DbUnit入门实战 DBUnit官网:http://www.dbunit.org/   另外<spring3.x企业应用开发实战>http://pan.baidu.com/s/1eQ7sXoe 密码:yqly    中使用了Unitils Unitils构建在DBUnit与EasyMock项目之上并与JUnit和TestNG相结合.支持数

单元测试工具 unitils

Unitils模块组件 Unitils通过模块化的方式来组织各个功能模块,采用类似于Spring的模块划分方式,如unitils-core.unitils-database.unitils-mock等.比以前整合在一个工程里面显得更加清晰,目前所有模块如下所示: ?  unitils-core:核心内核包. ?  unitils-database:维护测试数据库及连接池. ?  unitils-DbUnit:使用DbUnit来管理测试数据. ?  unitils-easymock:支持创建Moc

dbunit之org.dbunit.dataset.DataSetException: java.net.MalformedURLException解决方法

一.问题定位 在使用dbunit做DAO的单元测试时,抛出了一个org.dbunit.dataset.DataSetException: java.net.MalformedURLException异常,如下图, 可以看到问题出现在我写的TestDbUnit的49行,再看源代码 第49行是这一句 IDataset ds = new FlatXmlDataSet(file).但实际出现问题的是file对象中的TestDbUnit.class.getClassLoader().getResource

Java程序员修炼之道 之 单元测试

序 单元测试是一个非常好用的工具,是一个Java程序员修养的一部分.从04年开始,我就开始在项目实践中使用单元测试.十几年来,参与的项目基本上都或多或少的使用了单元测试,多的能有100%覆盖率的要求,少的也要覆盖主要代码,发现这个实践在提高软件质量和开发速度上还是很有好处的.在和朋友同事的交流中,发现有很多项目没有使用单元测试,也有很多程序员不会写单元测试,但是大家对这个都很有兴趣.所以我想把自己掌握的关于单元测试的技能(架构.设计和技术)和实施策略分享一下.当然,要是有那个企业愿意要求我去做相

九爷带你玩转 php单元测试

<我不是九爷> 我总感觉 PHP 的开发者们并没有对 PHP 的质量有所追求,可能是因为 PHP 的机制问题吧,让大?糠值目⒄咦芤晕榔鞣梦示兔挥形侍猓院芏嗍焙颍? PHP 开发的,就没有单元测试的这些概念了.能不能有点追求? 我个人也是 PHP,但同时我也比较讨厌那些完事就算了的开发者,作为一个开发者,或者说是一个产品的经手人,就应该用心地去做好每个细节,一次比一次要更好. 但是做单元测试,质量检查,是需要一定的时间和人力投入的,但我敢保证地说,你花时间投入的,绝对不会是没用的,一定对你,对项

使用DBUnit框架数据库插入特殊字符失败的查错经历

本文记录的是使用DBUnit测试框架进行数据库数据插入时,插入特殊字符失败的查错经历.希望能对向我这样的小白同学们在遇到类似问题时,能够有一些启发.背景:在写跟数据库交互模块的单元测试,数据库表中的ext字段,需要先写入数据,然后再读取出来,进行处理.ext字段格式是key1CTRL^Dvalue1CTRL^CKey2CTRL^Dvalue2.使用DBUnit框架来做单元测试,DBUnit是一个基于junit扩展的数据库测试框架.此次项目里插入数据库的数据是以xml形式的文件来组织的.xml文件

【Java程序员修炼之道 之 单元测试】

单元测试是一个非常好用的工具,是一个Java程序员修养的一部分.从04年开始,我就开始在项目实践中使用单元测试.十几年来,参与的项目基本上都或多或少的使用了单元测试,多的能有100%覆盖率的要求,少的也要覆盖主要代码,发现这个实践在提高软件质量和开发速度上还是很有好处的.在和朋友同事的交流中,发现有很多项目没有使用单元测试,也有很多程序员不会写单元测试,但是大家对这个都很有兴趣.所以我想把自己掌握的关于单元测试的技能(架构.设计和技术)和实施策略分享一下.当然,要是有那个企业愿意要求我去做相关的