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的软件开发过程
猫和路由器断电后服务器没响应
软件开发难度大还是硬件大
关于网络安全的校园小视频
浙江迅的网络技术有限公司
软件开发与嵌入式开发