时间:2021-05-19
DAO层测试难点
可重复性,每次运行单元测试,得到的数据是重复的
独立性,测试数据与实际数据相互独立
数据库中脏数据预处理
不能给数据库中数据带来变化
DAO层测试方法
使用内存数据库,如H2。优点:无需清空无关数据;缺点:单元测试中需要进行数据库初始化过程,如果初始化过程复杂,单元测试工作量增大
使用dbunit。优点:数据库初始化简单,大大减轻单元测试工作量;缺点:目前官方提供jar包只支持xml格式文件,需要自己开发Excel格式文件
基于dbunit进行DAO单元测试
应用环境:Spring、Mybatis、MySql、Excel
配置文件
1. pom.xml
引入jar包,unitils整合了dbunit,database,spring,io等模块
<dependency> <groupId>org.unitils</groupId> <artifactId>unitils-core</artifactId> <version>3.4.2</version> </dependency> <dependency> <groupId>org.unitils</groupId> <artifactId>unitils-dbunit</artifactId> <version>3.4.2</version> </dependency> <dependency> <groupId>org.unitils</groupId> <artifactId>unitils-io</artifactId> <version>3.4.2</version> </dependency> <dependency> <groupId>org.unitils</groupId> <artifactId>unitils-database</artifactId> <version>3.4.2</version> </dependency> <dependency> <groupId>org.unitils</groupId> <artifactId>unitils-spring</artifactId> <version>3.4.2</version> </dependency> <dependency> <groupId>org.dbunit</groupId> <artifactId>dbunit</artifactId> <version>2.5.3</version> </dependency>配置maven对resourcew文件过滤规则,如果不过滤maven会对resource文件重编码,导致Excel文件被破坏
<resources> <resource> <directory>src/test/resources</directory> <includes> <include>**/*.*</include> </includes> <filtering>false</filtering> </resource> </resources>2. unitils.properties
在测试源码根目录中创建一个项目级别的unitils.properties配置文件,主要用于配置自定义拓展模块,数据加载等相关信息
#启用unitils所需模块unitils.modules=database,dbunit#自定义扩展模块,加载Excel文件,默认拓展模块org.unitils.dbunit.DbUnitModule支持xmlunitils.module.dbunit.className=org.agoura.myunit.module.MyDbUnitModule#配置数据库连接database.driverClassName=com.mysql.jdbc.Driverdatabase.url=jdbc:mysql://127.0.0.1:3306/teams?autoReconnect=true&useUnicode=true&characterEncoding=utf-8database.userName=rootdatabase.password=agoura#配置为数据库名称database.schemaNames=teams#配置数据库方言database.dialect=mysql#需设置false,否则我们的测试函数只有在执行完函数体后,才将数据插入的数据表中unitils.module.database.runAfter=false#配置数据库维护策略.请注意下面这段描述# If set to true, the DBMaintainer will be used to update the unit test database schema. This is done once for each# test run, when creating the DataSource that provides access to the unit test database.updateDataBaseSchema.enabled=true#配置数据库表创建策略,是否自动建表以及建表sql脚本存放目录dbMaintainer.autoCreateExecutedScriptsTable=truedbMaintainer.keepRetryingAfterError.enabled=truedbMaintainer.script.locations=src/main/resources/dbscripts#dbMaintainer.script.fileExtensions=sql#数据集加载策略#CleanInsertLoadStrategy:先删除dateSet中有关表的数据,然后再插入数据#InsertLoadStrategy:只插入数据#RefreshLoadStrategy:有同样key的数据更新,没有的插入#UpdateLoadStrategy:有同样key的数据更新,没有的不做任何操作DbUnitModule.DataSet.loadStrategy.default=org.unitils.dbunit.datasetloadstrategy.impl.CleanInsertLoadStrategy#配置数据集工厂,自定义DbUnitModule.DataSet.factory.default=org.agoura.myunit.utils.MultiSchemaXlsDataSetFactoryDbUnitModule.ExpectedDataSet.factory.default=org.agoura.myunit.utils.MultiSchemaXlsDataSetFactory#配置事务策略 commit、rollback 和disabled;或者在代码的方法上标记@Transactional(value=TransactionMode.ROLLBACK)#commit 是单元测试方法过后提交事务#rollback 是回滚事务#disabled 是没有事务,默认情况下,事务管理是disabledDatabaseModule.Transactional.value.default=commit#配置数据集结构模式XSD生成路径,可以自定义目录,但不能为空dataSetStructureGenerator.xsd.dirName=src/main/resources/xsddbMaintainer.generateDataSetStructure.enabled=true#文件相对路径是否是测试类文件路径,false表示resource根目录dbUnit.datasetresolver.prefixWithPackageName=false3. spring-mybatis-unitils.xml
<?xml version="1.0" encoding="GBK"?><beans xmlns:xsi="http://.agoura.entity.Members;import org.junit.Before;import org.junit.BeforeClass;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import org.springframework.test.context.ContextConfiguration;import org.unitils.UnitilsJUnit4;import org.unitils.UnitilsJUnit4TestClassRunner;import org.unitils.dbunit.annotation.DataSet;import static org.junit.Assert.assertNotNull;@RunWith(UnitilsJUnit4TestClassRunner.class)@ContextConfiguration(locations = {"classpath*:spring-*.xml"})public class MembersMapperTest extends UnitilsJUnit4 { private MembersMapper membersMapper; private static ApplicationContext ctx; @BeforeClass public static void setUpBeforeClass() { ctx = new ClassPathXmlApplicationContext("classpath*:spring-mybatis-unitils.xml"); } @Before public void setUp() { membersMapper = (MembersMapper) ctx.getBean("membersMapper"); } @Test @DataSet(value = {"test.xls"}) //test.xlsx public void testSelectByPrimaryKey() throws Exception { Members member = membersMapper.selectByPrimaryKey(3); System.out.println(member); assertEquals("王五", member.getName()); }}@DataSet加载Excel文件,既可以加载 .xls文件,也可以加载 .xlsx文件。
.xls示例如下:
应数据库表名,字段必须和数据库表字段一一对应。
测试结果
以上这篇对dbunit进行mybatis DAO层Excel单元测试(必看篇)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
问题:写了一个新的dao接口,进行单元测试时提示:Initializationofbeanfailed;nestedexceptionisorg.springf
前言前几话主要讲解关于使用golang进行单元测试,在单元测试的上一层就是接口测试,本节主要讲使用golang进行接口测试,其中主要以http协议的接口测试来讲
为什么要进行单元测试?单元测试保证局部代码的质量单元测试改良项目代码的整体结构单元测试降低测试、维护升级的成本单元测试使开发过程适应频繁变化的需求单元测试有助于
前言单元测试对我们的代码质量非常重要。很多同学都会对业务逻辑或者工具方法写测试用例,但是往往忽略了对Controller层写单元测试。我所在的公司没见过一个对C
在进行使用的eclipse的进行开发的代码中,必然就会需要进行单元测试,在单元测试的情况提供较多的框架单元测试,例如使用junit单元测试,而在国外进行开发较好