www.sourceforge.netjia包下载地址
Dbunit在测试的时候用来隔离数据库的访问
1、 导入jar包 dbunit.jar
2、 导入Slf4.jar 一定要用1.6以上的jar包
3、 创建dbunit的测试数据xml
4、 创建dbunit的connection
Dbunit的Connection是用来对数据文件进行操作的
这个connecton必须依赖现在项目所使用的connection
5、 创建IDataSet,通过DATASet来获取测试数据中的数据
6、 初始化数据并且完成测试
7、 备份和还原数据库
package zttc.itat.service;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.sql.SQLException;
import org.dbunit.DatabaseUnitException;
import org.dbunit.database.DatabaseConnection;
import org.dbunit.database.IDatabaseConnection;
import org.dbunit.database.QueryDataSet;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.xml.FlatXmlDataSet;
import org.dbunit.dataset.xml.FlatXmlProducer;
import org.dbunit.operation.DatabaseOperation;
import org.junit.Test;
import static org.junit.Assert.*;
import org.xml.sax.InputSource;
import zttc.itat.dao.IUserDao;
import zttc.itat.dao.UserDao;
import zttc.itat.model.User;
import zttc.itat.util.DbUtil;
public class TestDbUnit
{
@Test
public void testLoad()
{
testBackupTable();
//依赖我们jdbc中的一个connction
try
{
//创建dbunit的Connection,需要传入一个connection做为参数
IDatabaseConnection con = new DatabaseConnection(DbUtil.getConnection());
/*
* FlatXmlDataSet用来获取基于属性存储的属性值
* XMLDataSet用来获取基于节点类型属性值
*
*
* */
IDataSet ds = new FlatXmlDataSet(new FlatXmlProducer(
new InputSource(
TestDbUnit.class.getClassLoader().getResourceAsStream("t_user.xml"))));
//会将数据库中的数据清空,并且把测试数据插入
DatabaseOperation.CLEAN_INSERT.execute(con, ds);
//从DAO中获取数据并且完成测试
IUserDao ud = new UserDao();
User tu = ud.load("admin");
assertEquals(tu.getId(), 1);
assertEquals(tu.getUsername(), "admin");
assertEquals(tu.getPassword(), "123");
assertEquals(tu.getNickname(), "超级管理员");
}
catch (DatabaseUnitException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
testResume();
}
@Test
public void testBackupAllTable()
{
try
{
//创建dbunit的Connection,需要传入一个connection做为参数
IDatabaseConnection con = new DatabaseConnection(DbUtil.getConnection());
//根据con创建相应的dataset,这个dataset包含了所有的表
IDataSet ds = con.createDataSet();
//将ds中的数据通过FlatXmlDataSet的格式写入文件中
FlatXmlDataSet.write(ds, new FileWriter("e:/test.xml"));
}
catch (DatabaseUnitException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Test
public void testBackupTable()
{
try
{
//创建dbunit的Connection,需要传入一个connection做为参数
IDatabaseConnection con = new DatabaseConnection(DbUtil.getConnection());
//通过QueryDataSet可以有效的选择要处理的表来作为数据集
QueryDataSet backup = new QueryDataSet(con);
//添加t_user这张表作为备份表
backup.addTable("t_user");
FlatXmlDataSet.write(backup, new FileWriter("e:/test.xml"));
}
catch (DatabaseUnitException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (SQLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Test
public void testResume()
{
//创建dbunit的Connection,需要传入一个connection做为参数
try
{
IDatabaseConnection con = new DatabaseConnection(DbUtil.getConnection());
//根据备份文件创建dataset
IDataSet ds = new FlatXmlDataSet(
new FlatXmlProducer(
new InputSource(
new FileInputStream("e:/test.xml"))));
DatabaseOperation.CLEAN_INSERT.execute(con, ds);
}
catch (DatabaseUnitException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (SQLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<dataset>
<!-- 基于节点的
<t_user>
<id>1</id>
<username>kh</username>
<password>123</password>
<nickname>孔浩</nickname>
</t_user>
-->
<!-- 基于属性值的 -->
<t_user id = "1" username = "admin" password = "123" nickname = "超级管理员"/>
</dataset>