DBUnit使用案例

1 . 概念

DbUnit是为数据库驱动的项目提供的一个对JUnit 的扩展,除了提供一些常用功能,它可以将你的数据库置于一个测试轮回之间的状态。

2 . Maven集成DBUnit

2.1 导包

           <!-- dbunit -->
         <dependency>
              <groupId>org.dbunit</groupId>
              <artifactId>dbunit</artifactId>
              <version>2.5.0</version>
         </dependency>
         <!-- logback-->
         <dependency>
              <groupId>ch.qos.logback</groupId>
              <artifactId>logback-access</artifactId>
              <version>1.1.3</version>
         </dependency>
         <dependency>
              <groupId>ch.qos.logback</groupId>
              <artifactId>logback-classic</artifactId>
              <version>1.1.3</version>
         </dependency>
         <!-- 数据库驱动 -->
         <dependency>
              <groupId>mysql</groupId>
              <artifactId>mysql-connector-java</artifactId>
              <version>5.1.37</version>
         </dependency>

2.2 创建数据文件夹

1)创建dbunit文件夹。存放dbunit所有数据信息

2)在dbunit文件夹下创建backup文件夹。存放数据库备份数据文件

3)创建test文件夹。存放所有测试数据文件

2.3 代码整理

2.3.1 DBUnitBase基类

DBUnit说明:

1)设置数据库连接信息

2)设置数据库数据备份路径

3)设置测试数据文件路径

4)数据备份方法和数据恢复方法

package com.zzwx.test.dbunit.base;
 
import java.io.File;
import java.io.FileWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.List;
 
import org.dbunit.database.DatabaseConnection;
import org.dbunit.database.DatabaseDataSet;
import org.dbunit.database.IDatabaseConnection;
import org.dbunit.database.QueryDataSet;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.xml.FlatXmlDataSet;
import org.dbunit.operation.DatabaseOperation;
 
/**
 * @author Roger
 * @desc DBUnit基类
 */
publicabstractclass DBUnitBase {
 
     /**
      * JDBC数据库连接
      */
     protected Connection conn = null;
 
     /**
      * DBUnit数据库连接
      */
     protected IDatabaseConnection connection = null;
 
     /**
      * 备份数据目录
      */
     protected String backupDataPath = "src/test/resources/dbunit/backup/";
 
     /**
      * 测试数据文件目录
      */
     protected String testDataPath = "src/test/resources/dbunit/test/";
 
     /**
      * 数据备份文件
      */
     protected File file = null;
 
     /**
      * 所有备份文件
      */
     protected List<File> files = null;
 
     /**
      * 获取数据库连接
      * 
      * @returnjava.sql.Connection
      * @throws Exception
      */
     protected Connection getConnection() throws Exception {
         Class.forName("com.mysql.jdbc.Driver");
         // 连接DB
         Connectionconn = DriverManager
                   .getConnection(
                            "jdbc:mysql://localhost:3306/zzwx?useUnicode=true&characterEncoding=UTF-8",
                            "root", "123456");
         returnconn;
     }
 
     /**
      * 通过表名备份数据
      * 
      * @param tableName
      *           表名
      * @param backupFileName
      *           备份文件名
      * @throws Exception
      */
     protectedvoid backupData(String tableName, String backupFileName)
              throws Exception {
         try {
              conn =getConnection();
              connection = new DatabaseConnection(conn);
              if (null != tableName && !"".equals(tableName)) {
                   // 通过表名备份单张表单数据
                   QueryDataSetbackupDataSet = new QueryDataSet(connection);
                   backupDataSet.addTable(tableName);
                   // 设置备份文件路径
                   file = new File(backupDataPath + backupFileName);
                   FlatXmlDataSet.write(backupDataSet, new FileWriter(file),
                            "UTF-8");
              }else {
                   // 备份数据库所有数据
                   IDataSetbackupDataSet = new DatabaseDataSet(connection, true);
                   // 设置备份文件路径
                   file = new File(backupDataPath + backupFileName);
                   FlatXmlDataSet.write(backupDataSet, new FileWriter(file),
                            "UTF-8");
              }
         }catch (Exception e) {
              e.printStackTrace();
         }finally {
              closeCon();
         }
     }
 
     /**
      * 通过xml文件恢复数据
      * 
      * @param fileName
      *           路径+文件名
      */
     @SuppressWarnings("deprecation")
     publicvoid recoverData(File file) {
         try {
              conn =getConnection();
              connection = new DatabaseConnection(conn);
              IDataSetdataSet = new FlatXmlDataSet(file);
              DatabaseOperation.CLEAN_INSERT.execute(connection, dataSet);
         }catch (Exception e) {
              e.printStackTrace();
         }finally {
              closeCon();
         }
     }
 
     /**
      * 关闭连接
      */
     protectedvoid closeCon() {
         try {
              if (connection != null) {
                   connection.close();
              }
              if (conn != null) {
                   conn.close();
              }
         }catch (SQLException e) {
              e.printStackTrace();
         }
     }
 
}

2.3.2 DBUnitAll

DBUnitAll说明:

1)继承DBUnitBase基类

2)添加测试数据,并将测试前数据备份到src/test/resources/dbunit/backup/all_data_back.xml

3)备份数据库所有数据方法、恢复数据库数据方法

4)使用该类时,setUpBackupAll(fileName)和recoverAllData()方法需要成对调用。不然数据库数据不会恢复到测试之前的数据。

package com.zzwx.test.dbunit;
 
import java.io.FileInputStream;
import java.sql.Connection;
 
import org.dbunit.database.DatabaseConnection;
import org.dbunit.database.IDatabaseConnection;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.xml.FlatXmlDataSet;
import org.dbunit.operation.DatabaseOperation;
 
import com.zzwx.test.dbunit.base.DBUnitBase;
 
/**
 * @author Roger
 * @desc备份所有数据库所有数据在一个备份文件中
 */
publicclass DBUnitAll extends DBUnitBase {
 
     /**
      * 添加测试数据,并备份数据库所有数据在 src/test/resources/dbunit/backup/all_data_back.xml
      * 
      * @param fileName
      *           测试数据文件
      */
     @SuppressWarnings("deprecation")
     publicvoid setUpBackupAll(String fileName) {
         // JDBC数据库连接
         Connectionconn = null;
         // DBUnit数据库连接
         IDatabaseConnectionconnection = null;
         try {
              conn =getConnection();
              // 获得DB连接
              connection = new DatabaseConnection(conn);
              // 备份数据库测试之前的数据
              backupAll();
              // 准备数据的读入
              IDataSetdataSet = new FlatXmlDataSet(new FileInputStream(
                       testDataPath + fileName));
              connection.createDataSet(new String[] {});
              DatabaseOperation.CLEAN_INSERT.execute(connection, dataSet);
         }catch (Exception e) {
              e.printStackTrace();
         }finally {
              closeCon();
         }
     }
 
     /**
      * 备份数据库所有数据
      */
     publicvoid backupAll() {
         try {
              super.backupData(null, "all_data_back.xml");
         }catch (Exception e) {
              e.printStackTrace();
         }
     }
 
     /**
      * 还原数据库到测试之前
      */
     publicvoid recoverAllData() {
          super.recoverData(file);
     }
}

2.3.3 DBUnitEach

DBUnitEach说明 :

1) 继承DBUnitBase基类

2) 添加测试数据,并备份需要备份数据表的数据,通过表名备份数据,每张表对于一个备份数据文件

setUpBackupEach()和recoverBackupEach()需要成对出现。不然数据库数据不会恢复到测试之前的数据。

package com.zzwx.test.dbunit;
 
import java.io.File;
import java.io.FileInputStream;
import java.sql.Connection;
import java.util.ArrayList;
 
import org.dbunit.database.DatabaseConnection;
import org.dbunit.database.IDatabaseConnection;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.xml.FlatXmlDataSet;
import org.dbunit.operation.DatabaseOperation;
 
import com.zzwx.test.dbunit.base.DBUnitBase;
 
/**
 * @author Roger
 * @desc添加测试数据并备份需要备份的表,每张表对应一个xml备份文件
 */
publicclass DBUnitEach extends DBUnitBase {
 
     /**
      * 添加测试数据并备份数据
      * 
      * @param fileName
      *           文件名
      * @param tableNames
      *           需要备份的表名集合
      */
     @SuppressWarnings("deprecation")
     publicvoid setUpBackupEach(String fileName, String... tableNames) {
         // JDBC数据库连接
         Connectionconn = null;
         // DBUnit数据库连接
         IDatabaseConnectionconnection = null;
         try {
              conn =getConnection();
              // 获得DB连接
              connection = new DatabaseConnection(conn);
              // 备份数据库测试之前的数据
              backupDataEach(tableNames);
              // 准备数据的读入
              IDataSetdataSet = new FlatXmlDataSet(new FileInputStream(
                       testDataPath + fileName));
              connection.createDataSet(new String[] {});
              DatabaseOperation.CLEAN_INSERT.execute(connection, dataSet);
         }catch (Exception e) {
              e.printStackTrace();
         }finally {
              closeCon();
         }
     }
 
     /**
      * 通过表名备份数据(每张表一个备份文件)
      * 
      * @param tableNames
      *           表名集合
      * @throws Exception
      */
     publicvoid backupDataEach(String... tableNames) throws Exception {
         try {
              if (tableNames != null && tableNames.length > 0) {
                   files = new ArrayList<File>();
                   for (String tableName : tableNames) {
                       super.backupData(tableName, tableName + "_back.xml");
                       files.add(file);
                   }
              }
         }catch (Exception e) {
              e.printStackTrace();
         }finally {
              closeCon();
         }
     }
 
     /**
      * 还原备份的数据
      */
     publicvoid recoverBackupEach() {
         if (null != files && files.size() > 0) {
              for (File file : files) {
                   super.recoverData(file);
              }
         }
     }
}

2.3.4 DBUnitEachAll

DBUnitEachAll说明:

1) 继承DBUnitBase基类

2) 添加测试数据,并备份所有要备份数据表的所有数据到一个备份文件中each_all_data_back.xml

3) setUpBackupEachAll()和recoverBackupEachAll()方法成对出现。不然数据库数据不会恢复到测试之前的数据。

package com.zzwx.test.dbunit;
 
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.sql.Connection;
 
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.operation.DatabaseOperation;
 
import com.zzwx.test.dbunit.base.DBUnitBase;
 
/**
 * @author Roger
 * @desc添加测试数据并备份测试前数据库所有数据到一个备份文件中
 */
publicclass DBUnitEachAll extends DBUnitBase {
 
     /**
      * 添加测试数据并备份数据
      * 
      * @param fileName
      *           文件名
      * @param tableNames
      *           表名集合
      */
     @SuppressWarnings("deprecation")
     publicvoid setUpBackupEachAll(String fileName, String... tableNames) {
         // JDBC数据库连接
         Connectionconn = null;
         // DBUnit数据库连接
         IDatabaseConnectionconnection = null;
         try {
              conn =getConnection();
              // 获得DB连接
              connection = new DatabaseConnection(conn);
              // 备份数据库测试之前的数据
              backupDataEachAll(tableNames);
              // 准备数据的读入
              IDataSetdataSet = new FlatXmlDataSet(new FileInputStream(
                       testDataPath + fileName));
              connection.createDataSet(new String[] {});
              DatabaseOperation.CLEAN_INSERT.execute(connection, dataSet);
         }catch (Exception e) {
              e.printStackTrace();
         }finally {
              closeCon();
         }
     }
 
     /**
      * 通过表名将数据库中的数据备份到一个xml备份文件中
      * 
      * @param tableNames
      *           表名集合
      * @throws Exception
      */
     publicvoid backupDataEachAll(String... tableNames) throws Exception {
         try {
              conn =getConnection();
              // 获得DB连接
              connection = new DatabaseConnection(conn);
              
              QueryDataSetbackupDataSet = new QueryDataSet(connection);
 
              if (null != tableNames && tableNames.length > 0) {
                   for (String tableName : tableNames) {
                       backupDataSet.addTable(tableName);
                   }
              }
              // 设置备份文件路径
              file = new File(backupDataPath + "each_all_data_back.xml");
              FlatXmlDataSet.write(backupDataSet, new FileWriter(file), "UTF-8");
         }catch (Exception e) {
              e.printStackTrace();
         }finally {
              closeCon();
         }
     }
 
     /**
      * 还原备份的数据
      */
     publicvoid recoverBackupEachAll(){
         if(null != file){
              super.recoverData(file);
         }
     }
 
}
时间: 2024-10-09 23:26:20

DBUnit使用案例的相关文章

玩转单元测试之DBUnit

DBunit 是一种扩展于JUnit的数据库驱动测试框架,它使数据库在测试过程之间处于一种已知状态,如果一个测试用例对数据库造成了破坏性影响,它可以帮助避免造成后面的测试失败或者给出错误结果. 虽然不是什么新鲜货,但最近正好用到,就把学到的跟大家分享一下. 关键词:数据库层测试,DAO层测试,DBUnit教程,DBUnit入门,DBUnit实例,Sring中结合DBUnit对Dao层测试 目录 简介 前提条件 Maven配置 准备工作 实例详解 测试基类 关于数据集 Example 1 Flat

玩转单元測试之DBUnit

本文同一时候发表在:http://www.cnblogs.com/wade-xu/p/4547381.html DBunit 是一种扩展于JUnit的数据库驱动測试框架,它使数据库在測试过程之间处于一种已知状态.假设一个測试用例对数据库造成了破坏性影响,它能够帮助避免造成后面的測试失败或者给出错误结果. 尽管不是什么新奇货,但近期正好用到.就把学到的跟大家分享一下. 关键词:数据库层測试,DAO层測试,DBUnit教程,DBUnit入门.DBUnit实例,Sring中结合DBUnit对Dao层測

解决 libev.so.4()(64bit) is needed by percona-xtrabackup-2.3.4-1.el6.x86_64案例

在mysql主从同步时经常会用到Xtra, XtraBackup可以说是一个相对完美的免费开源数据备份工具,支持在线无锁表同步复制和可并行高效率的安全备份恢复机制相比mysqldump来说优势较大好处多,在RHEL6中安装XtraBackup时会发生缺少依赖包的现象 本案例针对Xtra缺少依赖包的情况进行安装分析解决 1.本实验环境 [root@master ~]# uname  -r 2.6.32-573.el6.x86_64 [root@master ~]# cat /etc/redhat-

系统内存耗尽的案例分析

近日遇到一个RAC节点hang导致节点被重启的问题,最后经过分析,发现在系统运行一段时间后,系统内存就会耗尽,原本256G的内存,最后只剩几百M. 1. 问题时间段的TOP输出可以看到,内存只剩7G,而分析内存问题,TOP输出是不够的,一般情况下,Database的SGA和PGA是内存使用大户,所以,在TOP很难发现谁是使用内存最多的. 除非某些进程内存使用的格外明显 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Linux OSWbb v7.3.

案例分享:使用员工电脑监控,有什么好处?

下面分享一个真实案例: 北京**科技有限公司梁总想要通过企业员工电脑监控来对员工上网进行管理,通过软件的监控与管理,减少上班与工作无关的上网行为,从而提高员工有效工作效率. 员工工作效率低,上网无节制 梁总发现,最近公司业绩颇有下滑的趋势,于是想要了解员工的详细工作进展,当他在公司时,每一个员工看起来都在忙碌着工作,似乎没什么不妥,但是原因到底是什么呢?难道这只是表面的工作,平时我不在公司,是这样的状态吗?员工会在我离开时,大部分时间在做与工作无关的事,上网聊天?购物? 后来,梁总经朋友介绍,说

OpenFEA应用案例

OpenFEA分析性能卓越,使用简便,自发布以来,即受到大数据分析师的推祟,在各行各业广泛得到应用.    案例一:网络安全态势感知     网络安全态势感知,是基于OpenFEA技术,通过对影响网络安全的资产.漏洞.攻击.异常流量等因素进行大数据分析,使用户宏观.全局的了解网络的安全状况,动态把握特定环境下的网络风险演变过程.从而有效保障网络空间的安全,构筑"防护+监测"的全方位安全保障体系.      案例二:用户异常行为分析     用户异常行为分析(简称UBA),是以OpenF

Android Multimedia框架总结(十四)Camera框架初识及自定义相机案例

转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52738492 前言:国庆节告一段落,又是新一月,上月主要是围绕MediaPlayer相关展开,从今天开始,开始分析多媒体框架中的Camera模块,看下今天的Agenda: Camera拍照 Camera录像 新API android.hardware.camera2 新旧API特点对比 Camera自定义相机 新API andro

Ext.js入门:常用组件与综合案例(七)

一:datefield简单示例 二:timefield简单示例 三:numberfield简单示例 四:FormPanel提交 datefield简单示例: <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> <link href="Ext/resources/css/ext-all.css&

linux入门之grep 正则表达式案例

grep 正则表达式案例 案例一: 1.显示/proc/meminfo文件中以大小s开头的行:(要求:使用两种方式) #grep -i '^s' /proc/meminfo #grep  '^[Ss]' /proc/meminfo #grep -E '^(s|S)' /proc/meinfo 2.显示/etc/passwd文件中不以/bin/bash结尾的行 #grep -v '/bin/bash$' /etc/passwd 3.显示用户rpc默认的shell程序 #grep '^\<rpc\>