DBUnit使用案例
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,1 . 概念DbUnit是为数据库驱动的项目提供的一个对JUnit 的扩展,除了提供一些常用功能,它可以将你的数据库置于一个测试轮回之间的状态。2 . Maven集成DBUnit2.1 导包
千家信息网最后更新 2026年10月31日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安全错误
数据库的锁怎样保障安全
天津市摩尔互联网科技
互联网是第几次科技革命的成果
江苏根荣互联网科技
盈实互联网科技
互联网下的科技发展
互联网科技与金融科技
广州宏创互联网科技
银优互联网科技有限公司
奇士达互联网科技
亿人帮互联网科技
中国最先进互联网科技公司
华夏恒生互联网科技013171
互联网科技大赛获奖感言
科技互联网海报
黑科技 体验场景 互联网大会
35岁以上互联网科技行业
济南小医互联网科技有限公司招聘
上海万顺科技互联网有限公司招聘
现代互联网科技公司
互联网科技创新方面的资料
互联网科技公司华为
互联网 科技
互联网公司 科技公司
腾讯科技 互联网女皇
互联网科技大会案例
成都玖崟互联网科技有限公司乐商圈怎么样
北京大学互联网科技怎么样
广州慧亚互联网科技怎么样
启辰互联网科技
21世纪互联网科技成就