首页 > 代码库 > Unitils集成DBUnit、Spring-单元测试
Unitils集成DBUnit、Spring-单元测试
Unitils集成DBUnit、Spring-单元测试
1、maven-pom文件中引入相关jar包
<!-- Unitils -dbunit、Spring --> <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>
以上Unitils集成dbunit、Spring所必须jar包,工程文件是通过maven构建的,所以都是maven的目录结构。
2、引入unitils的配置文件unitils.properties,这个配置文件可以用unitils-core的jar包中copy出来,然后进行自定义配置,如下:
#启用unitils所需模块unitils.modules=database,dbunit,spring#自定义扩展模块,详见实例源码#unitils.module.dbunit.className=org.unitils.dbunit.DbUnitModuleunitils.module.dbunit.className=com.candle.util.MySqlDbUnitModule#配置数据库连接database.driverClassName=com.mysql.jdbc.Driverdatabase.url=jdbc:mysql://127.0.0.1:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=utf-8database.userName=rootdatabase.password=123qwe#配置为数据库名称database.schemaNames=test#配置数据库方言database.dialect=mysql#配置数据库维护策略.updateDataBaseSchema.enabled=true#配置数据库表创建策略,是否自动建表以及建表sql脚本存放目录#dbMaintainer.autoCreateExecutedScriptsTable=false#dbMaintainer.script.locations=D:\workspace\unit-demo\src\test\java\com\candle\dao#数据集加载策略#CleanInsertLoadStrategy:先删除dateSet中有关表的数据,然后再插入数据 #InsertLoadStrategy:只插入数据 #RefreshLoadStrategy:有同样key的数据更新,没有的插入 #UpdateLoadStrategy:有同样key的数据更新,没有的不做任何操作 DbUnitModule.DataSet.loadStrategy.default=org.unitils.dbunit.datasetloadstrategy.impl.CleanInsertLoadStrategy#配置数据集工厂DbUnitModule.DataSet.factory.default=org.unitils.dbunit.datasetfactory.impl.MultiSchemaXmlDataSetFactoryDbUnitModule.ExpectedDataSet.factory.default=org.unitils.dbunit.datasetfactory.impl.MultiSchemaXmlDataSetFactory#配置事务策略 commit、rollback 和disabled;或者在代码的方法上标记@Transactional(value=http://www.mamicode.com/TransactionMode.ROLLBACK)>
自定义配置文件有两个,分别是unitils.properties和unitils-local.properties,但通常我们只需要配置unitils.properties即可,这个配置文件默认是放在工程的根目录下,我这里的测试
根目录是/src/test/resources/下。因为unitils默认是这样去读取配置文件的,所以不建议移动到其他目目录,不然可能需要更改读取配置文件的代码了。
3、写一个mysql数据库配置的类,用于解决dbunit中存在的bug,在上一篇博客中有讲到,代码如下
package com.candle.util;import org.dbunit.database.DatabaseConfig;import org.dbunit.ext.mysql.MySqlDataTypeFactory;import org.dbunit.ext.mysql.MySqlMetadataHandler;import org.unitils.dbunit.DbUnitModule;import org.unitils.dbunit.util.DbUnitDatabaseConnection;public class MySqlDbUnitModule extends DbUnitModule { @Override public DbUnitDatabaseConnection getDbUnitDatabaseConnection( final String schemaName) { DbUnitDatabaseConnection result = dbUnitDatabaseConnections .get(schemaName); if (null != result) { return result; } result = super.getDbUnitDatabaseConnection(schemaName); result.getConfig().setProperty( DatabaseConfig.PROPERTY_DATATYPE_FACTORY, new MySqlDataTypeFactory()); result.getConfig().setProperty( DatabaseConfig.PROPERTY_METADATA_HANDLER, new MySqlMetadataHandler()); return result; }}
加如上类之后,再去看unitils.properties中
#自定义扩展模块,详见实例源码#unitils.module.dbunit.className=org.unitils.dbunit.DbUnitModuleunitils.module.dbunit.className=com.candle.util.MySqlDbUnitModule
如上就制定到自定义的类com.candle.util.MySqlDbUnitModule,解决dbunit中可能存在的bug
4、准备测试数据
@DataSet和@ExpectedDataSet
这里都用xml来存放数据,如果要用excel,需要重写excel获取数据的相关代码
xml存放路径如下:src/test/resources/dataSetXml/,目录下包括@DataSet数据(login.xml)和@ExpectedDataSet数据login_expect.xml
5、测试代码
package com.candle.dao;import static org.junit.Assert.*;import org.junit.Test;import org.unitils.UnitilsJUnit4;import org.unitils.database.annotations.Transactional;import org.unitils.database.util.TransactionMode;import org.unitils.dbunit.annotation.DataSet;import org.unitils.dbunit.annotation.ExpectedDataSet;import org.unitils.reflectionassert.ReflectionAssert;import org.unitils.spring.annotation.SpringApplicationContext;import org.unitils.spring.annotation.SpringBean;import com.candle.model.LoginDO;@SpringApplicationContext({"applicationContext-test.xml"})public class LoginDAOTest5 extends UnitilsJUnit4{ //Spring容器中加载Id为"userService"的Bean @SpringBean("loginDAO") private LoginDAO loginDAO ; @Test @ExpectedDataSet("/dataSetXml/login_expect.xml") public void testSaveLogin() { LoginDO loginDo = new LoginDO(); loginDo.setId(2); loginDo.setName("thomas"); loginDo.setPasswd("123qwe"); loginDAO.saveLogin(loginDo); } @Test @DataSet("/dataSetXml/login.xml") //@Transactional(value=http://www.mamicode.com/TransactionMode.ROLLBACK) public void testFindById() { LoginDO loginDo = loginDAO.findById(1) ; ReflectionAssert.assertPropertyLenientEquals("name","candle",loginDo) ; assertNotNull("空置", loginDo); assertEquals("candle",loginDo.getName()) ; } }
其中,关于unitils集成spring,就是通过集成UnitilsJUnit4类引入spring的配置文件,即可完成Spring的bean之类的重用~
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。