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注解。
原文地址:http://blog.csdn.net/u013516966/article/details/43866109