您好,登錄后才能下訂單哦!
DbUnit是為數據庫驅動的項目提供的一個對JUnit 的擴展,除了提供一些常用功能,它可以將你的數據庫置于一個測試輪回之間的狀態。
<!-- dbunit --> <dependency> <groupId>org.dbunit</groupId> <artifactId>dbunit</artifactId> <version>2.5.0</version> </dependency> <!-- logback--> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-access</artifactId> <version>1.1.3</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.1.3</version> </dependency> <!-- 數據庫驅動 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.37</version> </dependency>
1)創建dbunit文件夾。存放dbunit所有數據信息
2)在dbunit文件夾下創建backup文件夾。存放數據庫備份數據文件
3)創建test文件夾。存放所有測試數據文件
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<File> 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(); } } }
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); } }
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<File>(); 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); } } } }
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); } } }
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。