千家信息网

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


0