DBUnit使用案例
发表于:2025-01-25 作者:千家信息网编辑
千家信息网最后更新 2025年01月25日,1 . 概念DbUnit是为数据库驱动的项目提供的一个对JUnit 的扩展,除了提供一些常用功能,它可以将你的数据库置于一个测试轮回之间的状态。2 . Maven集成DBUnit2.1 导包
千家信息网最后更新 2025年01月25日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 Listfiles = 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安全错误
数据库的锁怎样保障安全
武汉大学 国家网络安全学院
最新国家信息网络安全法
益阳市发展良好网络安全吗
服务器压力剧增原因
什么是新兴的无线网络技术
山西旅游团软件开发
江苏省网络安全竞赛通知
怎么给默认mysql数据库改名
网络技术基础ppt
网络安全启动仪式新闻
查看数据库当前日期
中学校园网络安全教育内容
果洛撬瞬网络技术有限公司
文件服务器下载失败
安徽有哪些软件开发公司
如何做到数据库共享
网络技术方法的优点
自动构建服务器
闵行区软件开发代理品牌
网络安全阵地管理方案
数据库求工龄
罗修的斗罗大陆服务器
xml 与 数据库
软件开发第三方鉴定费用
全国网络安全内容
数据库技术岗
市场份额最多的数据库
高考阅卷系统网络安全要求
cbm数据库属于什么数据库
法制教育之手机网络安全