junit总结(五) dbunit的使用

本文介绍了如何在JUnit测试中使用Dbunit进行数据库隔离,包括导入必要的jar包,创建测试数据XML,设置Dbunit连接,初始化数据并进行测试,以及数据库的备份和还原操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值