本文主要讲解如何在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 层接口 -> 从数据库取实际结果-> 事先准备的期望结果 -> 断言 -> 回滚数据库 -> 关闭数据库连接
添加依赖
引入 dbunit
、spring-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
,这里是 dbunit
的 FlatXmlDataSet
格式,元素名代表表名,属性对应字段名。
<?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>
编写 DBUnit 基类
在 com/heardfate/springboot/demo/demo04/dbunit/BaseDBUnit.java
下添加 DBUnit 基类
编写测试类 UserDaoTest
在
com/heardfate/springboot/demo/demo04/dao/UserDaoTest.java
下添加测试类
只测试类数据是否符合期望,插入新数据,获取所有数据
运行测试方法
运行测试方法
UserDaoTest
查看是否通过测试
测试全通过!
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于