iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >DBUnit使用案例
  • 579
分享到

DBUnit使用案例

2024-04-02 19:04:59 579人浏览 安东尼
摘要

1 . 概念DbUnit是为数据库驱动的项目提供的一个对JUnit 的扩展,除了提供一些常用功能,它可以将你的数据库置于一个测试轮回之间的状态。2 . Maven集成DBUnit2.1 导包 &n

1 . 概念

DbUnit是为数据库驱动的项目提供的一个对JUnit 的扩展,除了提供一些常用功能,它可以将你的数据库置于一个测试轮回之间的状态。

2 . Maven集成DBUnit

2.1 导包

           <!-- 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>

2.2 创建数据文件夹

DBUnit使用案例

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;
 

publicabstractclass DBUnitBase {
 
     
     protected Connection conn = null;
 
     
     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;
 
     
     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;
     }
 
     
     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();
         }
     }
 
     
     @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;
 

publicclass DBUnitAll extends DBUnitBase {
 
     
     @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;
 

publicclass DBUnitEach extends DBUnitBase {
 
     
     @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();
         }
     }
 
     
     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);
              }
         }
     }
}

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;
 

publicclass DBUnitEachAll extends DBUnitBase {
 
     
     @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();
         }
     }
 
     
     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);
         }
     }
 
}


您可能感兴趣的文档:

--结束END--

本文标题: DBUnit使用案例

本文链接: https://www.lsjlt.com/news/40724.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • CSS的使用案例
    小编给大家分享一下CSS的使用案例,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! 内联方式:样式定义在单个的HTML元素中 ...
    99+
    2024-04-02
  • React ref的使用案例
    本篇内容主要讲解“React ref的使用案例”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“React ref的使用案例”吧!什么是 ref官网介绍:在典型的 React 数据流中,props ...
    99+
    2023-06-14
  • CrashRpt使用案例详解
    CrashRpt介绍及简单应用 1、简介 CrashRpt是一个开源的第三方包,在程序出现未处理异常时,能够收集错误信息,并生成程序错误报告。CrashRpt可以将报告按照指定的方式...
    99+
    2024-04-02
  • Scrapy使用案例分析
    这篇“Scrapy使用案例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Scrapy使用案例分析”文章吧。scrapy是...
    99+
    2023-06-28
  • Java中RMI的使用案例
    这篇文章主要介绍了Java中RMI的使用案例,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。java基本数据类型有哪些Java的基本数据类型分为:1、整数类型,用来表示整数的数...
    99+
    2023-06-15
  • SpringMVC使用RESTful接口案例
    目录控制器Controller方法一-实现Controller接口方式二-使用注解@Controller@RequestMappingRestFul风格控制器Controller 控...
    99+
    2022-12-08
    SpringMVC RESTful SpringMVC RESTful接口 Java RESTful
  • C# log4net使用案例详解
    这边先介绍简单的使用:在控制台输出和写入文件 首先添加log4net的nuget包 然后在app.config中添加配置项==configSections只能有一个,且是config...
    99+
    2024-04-02
  • Android LayoutParams使用案例详解
    LayoutParams是什么? LayoutParams主要保存了一个View的布局参数,因此可以使用LayoutParams来改变布局参数从而达到View位置的效果,一般在自定义...
    99+
    2024-04-02
  • C# AttributeUsage使用案例详解
    C# AttributeUsage的使用是如何的呢?首先让我们来了解一下什么是AttributeUsage类它是另外一个预定义特性类,AttributeUsage类的作用就是帮助我们...
    99+
    2024-04-02
  • Android GridLayout使用案例详解
    目录一、简介二、常用属性介绍三、平分问题四、小米计算器效果五、动态加载一、简介 GridLayout是Android4.0引入的网格布局,使用它可以减少布局嵌套。也算是常用,但一直没...
    99+
    2024-04-02
  • C# PropertyGrid使用案例详解
    1. 只有public的property能显示出来,可以通过BrowsableAttribute来控制是否显示,通过CategoryAttribute设置分类,通过Descripti...
    99+
    2024-04-02
  • Android VelocityTracker使用案例详解
       VelocityTracker顾名思义即速度跟踪,在android中主要应用于touch even。VelocityTracker通过跟踪一连串事件实时计算...
    99+
    2024-04-02
  • Oracle SQL*Loader使用案例(三)
          上两篇文章中,介绍了SQL*Loader的使用方法及使用案例,本篇将根据实际的使用案例来更深层次的来解读SQL*Loader     &nbs...
    99+
    2024-04-02
  • SpringCloudFeign的使用案例详解
    目录Feign简介使用传参拓展配置超时、连接时间日志打印Feign简介 Feign是Netflix开发的⼀个轻量级RESTful的HTTP服务客户端(⽤它来发起请求,远程调⽤的),是...
    99+
    2023-02-09
    Spring Cloud Feign使用 Spring Cloud Feign
  • Linux awk使用案例教程
    awk脚本...
    99+
    2023-06-05
  • Android BindService使用案例讲解
    最近学习了一下Android里面的Service的应用,在BindService部分小卡了一下,主要是开始没有彻底理解为什么要这么实现。 BindService和Started Se...
    99+
    2024-04-02
  • Android ActivityManager使用案例详解
    前言 Activity可以获取运行中的应用信息,可以获取到servcie,process,app,memory,Task信息等。 获取信息 ActivityManager....
    99+
    2024-04-02
  • Android Handler使用案例详解
    什么是Handler? Handler可以发送和处理消息对象或Runnable对象,这些消息对象和Runnable对象与一个线程相关联。每个Handler的实例都关联了一个线程和线程...
    99+
    2024-04-02
  • @RequestBody的使用案例代码
    基础知识介绍:        @RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的);而最常用的使用...
    99+
    2023-02-04
    @RequestBody的使用 @RequestBody案例
  • 使用SQL的案例分析
    小编给大家分享一下使用SQL的案例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! 需求 所有部门汇总的结果的打分。大部分...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作