SpringBoot 教程 & 笔记 |Demo08- 整合 DBUnit 进行单元测试

本贴最后更新于 2236 天前,其中的信息可能已经沧海桑田

本文主要讲解如何在springboot下整合DBUnit进行单元测试。

本教程在Demo08基础上添加DBUnit进行单元测试

官方使用指南:http://dbunit.sourceforge.net/howto.html

DBUnit 介绍

DBunit 是一种扩展于 JUnit 的数据库驱动测试框架,它使数据库在测试过程之间处于一种已知状态,如果一个测试用例对数据库造成了破坏性影响,它可以帮助避免造成后面的测试失败或者给出错误结果。
DBunit 通过维护真实数据库与数据集(IDataSet)之间的关系来发现与暴露测试过程中的问题。IDataSet 代表一个或多个表的数据。此处 IDataSet 可以自建,可以由数据库导出,并以多种方式体现,xml 文件、XLS 文件和数据库查询数据等。
基于 DBUnit 的测试的主要接口是 IDataSet,可以将数据库模式的全部内容表示为单个 IDataSet 实例。这些表本身由 Itable 实例来表示。
IDataSet 的实现有很多,每一个都对应一个不同的数据源或加载机制。最常用的几种 IDataSet 实现为: 
FlatXmlDataSet :数据的简单平面文件 XML 表示 
QueryDataSet :用 SQL 查询获得的数据 
DatabaseDataSet :数据库表本身内容的一种表示 
XlsDataSet :数据的 excel 表示

测试流程大概是这样的,建立数据库连接 -> 备份表 -> 清空数据表 -> 插入准备的数据 -> 调用 Dao 层接口 -> 从数据库取实际结果-> 事先准备的期望结果 -> 断言 -> 回滚数据库 -> 关闭数据库连接

添加依赖

引入 dbunitspring-boot-starter-log4j2 依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
    <version>2.1.0.RC1</version>
</dependency>

<dependency>
    <groupId>org.dbunit</groupId>
    <artifactId>dbunit</artifactId>
    <version>2.6.0</version>
</dependency>

添加依赖

数据准备

初始数据 UserDriver.xml,这里是 dbunitFlatXmlDataSet 格式,元素名代表表名,属性对应字段名。

<?xml version="1.0" encoding="UTF-8"?>
<dataset>
    <user id="1" name="userOne" age="18" email="user-one@heardfate.com"/>
    <user id="2" name="userTwo" age="20" email="userTwo@heardfate.com"/>
    <user id="1060052237347897346" age="55" email="moreuser@heardfate.com"/>
</dataset>

数据准备

期望数据 UserDriver_check.xml,期望数据必须映射所以字段,为空的用 [NULL] 表示

<?xml version="1.0" encoding="UTF-8"?>
<dataset>
    <user id="1" name="userOne" age="18" email="user-one@heardfate.com"/>
    <user id="2" name="userTwo" age="20" email="userTwo@heardfate.com"/>
    <user id="1060052237347897346" name="[NULL]" age="55" email="moreuser@heardfate.com"/>
</dataset>

数据准备

LOG4J2 配置

配置 log4j,打印日志,查看数据流转信息。
log4j.xml 内容:

<?xml version="1.0" encoding="UTF-8"?>
<!-- status=debug 可以查看log4j的装配过程 -->
<configuration status="off" monitorInterval="1800">
	<properties>
		<property name="LOG_HOME">/Volumes/MacDisk/logs/springbootdemo</property>
		<property name="BACKUP_HOME">${LOG_HOME}/backup</property>
		<property name="SERVER_NAME">demo04</property>
	</properties>
	<appenders>
		<!-- 定义控制台输出 -->
		<Console name="Console" target="SYSTEM_OUT" follow="true">
			<PatternLayout pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} %-7level [%thread][%class{36}:%line] - %msg%n" />
		</Console><!-- 程序员调试日志 -->
		<RollingRandomAccessFile name="DevLog"
			fileName="${LOG_HOME}/dev/${SERVER_NAME}.log" filePattern="${BACKUP_HOME}/${SERVER_NAME}.%d{yyyy-MM-dd}.log">
			<PatternLayout
				pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} %-7level [%thread][%class{36}:%line] - %msg%n" />
			<Policies>
				<TimeBasedTriggeringPolicy interval="1" modulate="true" />
			</Policies>
		</RollingRandomAccessFile>
	</appenders>
	<Loggers>
		<!-- 3rdparty Loggers -->
		<Root level="INFO">
			<AppenderRef ref="Console" />
		</Root>
		<!--只有com.heardfate.springboot.demo输出DEBUG日志-->
		<Logger name="com.heardfate.springboot.demo" level="DEBUG">
			<AppenderRef ref="DevLog" />
		</Logger>
	</Loggers>
</configuration>

log4j 配置

编写 DBUnit 基类

com/heardfate/springboot/demo/demo04/dbunit/BaseDBUnit.java 下添加 DBUnit 基类

编写测试类 UserDaoTest

com/heardfate/springboot/demo/demo04/dao/UserDaoTest.java 下添加测试类
只测试类数据是否符合期望,插入新数据,获取所有数据

运行测试方法

运行测试方法 UserDaoTest 查看是否通过测试
测试全通过!
运行测试

  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    943 引用 • 1460 回帖 • 3 关注
  • dbunit
    1 引用
  • Log4j

    Log4j 是 Apache 开源的一款使用广泛的 Java 日志组件。

    20 引用 • 18 回帖 • 29 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...