千家信息网

DBUnit使用案例

发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,1 . 概念DbUnit是为数据库驱动的项目提供的一个对JUnit 的扩展,除了提供一些常用功能,它可以将你的数据库置于一个测试轮回之间的状态。2 . Maven集成DBUnit2.1 导包
千家信息网最后更新 2025年11月07日DBUnit使用案例

1 . 概念

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

2 . Maven集成DBUnit

2.1 导包

                                  org.dbunit              dbunit              2.5.0                                         ch.qos.logback              logback-access              1.1.3                                ch.qos.logback              logback-classic              1.1.3                                         mysql              mysql-connector-java              5.1.37         

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 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();                   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);         }     } }


数据 备份 数据库 文件 测试 方法 路径 数据备份 文件夹 文件名 UTF-8 准备 信息 数据表 目录 之间 代码 功能 名将 常用 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 请求超时服务器未响应怎么办 网络技术3级题库 石家庄科美网络技术有限公司 上海麦鹊互联网科技有限公司 数据库填充位置 网络安全教育周手抄报图片 公安网络安全岗位需要加班吗 软件开发dod ftp服务器下载不了怎么办 网络安全IP地址封禁 csol为什么总是服务器中断 网络安全公司使命和愿景 电脑时间和服务器同时出错 公检法行业软件开发商的发展 广东尚睿网络技术公司 抗震救灾视频软件开发 登陆南京图书馆数据库 网络安全法手抄报资料 上海亿宝网络技术 山西发展软件开发设计 关于软件开发知网的摘要 游戏为啥不能用云服务器 csol更新后无法连接到服务器 镇海计算机软件开发流程 net的软件开发过程 猫和路由器断电后服务器没响应 软件开发难度大还是硬件大 关于网络安全的校园小视频 浙江迅的网络技术有限公司 软件开发与嵌入式开发
0