关于unitils联合dbunit的测试
unitils据说测试的能力很强大,可测试dao,service,web层,其实对数据库的测试我更关心,看到有人展示了测试的方法,数据直接写在xls表中,很直观,然后就依照他们的方法进行试验,花费的时间比较多,前后应该有半个月,总是在各种地方卡壳。最后总算是搞出来了,大约有两个关键点,其一是百度文库中有个朋友在文章:dbunit经典的NoSuchColumnException解决之道 给出了应该使用dbunit2.4.9的版本,具体原因也没深究,然后在另一篇中:Unitils集成DBUnit的问题-解决方案 给出了继承DbUnitModule的方法,据此实践终于可以测试Dao层代码。
实验环境为win7 64bit,idea15.0.2
测试数据采用excel表的形式:
数据库脚本如下:
-- database schema automatically loaded by unitils before tests are run fileName:001_create_schema.ddl
CREATE TABLE `t_user` (
`user_id` int(11) NOT NULL auto_increment,
`user_name` varchar(32) NOT NULL,
`user_age` varchar(32) NOT NULL,
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
unitils.properties配置如下:
unitils.modules=database,dbunit,hibernate,spring,
#unitils.module.dbunit.className=org.unitils.dbunit.DbUnitModule
database.driverClassName=com.mysql.jdbc.Driver
database.url=jdbc:mysql://localhost:3306/test_ssh
database.dialect = mysql
database.userName=root
database.password=
database.schemaNames=test_ssh
updateDataBaseSchema.enabled=true
# unitils will construct the test database using the ddl file found in this directory
dbMaintainer.autoCreateExecutedScriptsTable=true
dbMaintainer.script.locations=resources/dbscripts
dataSetStructureGenerator.xsd.dirName=resources/xsd
DbUnitModule.DataSet.factory.default=com.tgb.test.dataset.excel.MultiSchemaXlsDataSetFactory
DbUnitModule.ExpectedDataSet.factory.default=com.tgb.test.dataset.excel.MultiSchemaXlsDataSetFactory
DbUnitModule.DataSet.loadStrategy.default=org.unitils.dbunit.datasetloadstrategy.impl.CleanInsertLoadStrategy
DatabaseModule.Transactional.value.default=commit
unitils.module.spring.className=org.unitils.spring.SpringModule
#unitils.module.spring.runAfter=database
unitils.module.spring.enabled=true
unitils.module.dbunit.className=org.unitils.dbunit.MySqlDbUnitModule
注意:unitils.module.dbunit.className需替换成自定义的类
unitils-local.properties配置如下:
####################################
# Default configuration of Unitils #
####################################
database.userName=root
database.password=root
dbMaintainer.keepRetryingAfterError.enabled=true
自定义类为:
/**
* fileName:MySqlDbUnitModule.java
*/
package org.unitils.dbunit;
import org.dbunit.database.DatabaseConfig;
import org.dbunit.dataset.datatype.BooleanDataType;
import org.dbunit.ext.mysql.MySqlDataTypeFactory;
import org.dbunit.ext.mysql.MySqlMetadataHandler;
import org.hibernate.metamodel.relational.Database;
import org.unitils.dbunit.DbUnitModule;
import org.unitils.dbunit.util.DbUnitDatabaseConnection;
/**
* Created by luhx on 2016-2-2.
*/
public class MySqlDbUnitModule extends DbUnitModule {
@Override
public DbUnitDatabaseConnection getDbUnitDatabaseConnection(
final String schemaName) {
DbUnitDatabaseConnection dbConn = super.getDbUnitDatabaseConnection(schemaName);
dbConn.getConfig().setProperty(DatabaseConfig.FEATURE_CASE_SENSITIVE_TABLE_NAMES, Boolean.valueOf(true));//dbConn.getConfig().getProperty(schemaName)
dbConn.getConfig().setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, new MySqlDataTypeFactory());
dbConn.getConfig().setProperty(DatabaseConfig.PROPERTY_METADATA_HANDLER, new MySqlMetadataHandler());
return dbConn;
}
}
由于我的数据库表字段均采用小写,因此
在载入DefaultDataSet时一定要将caseSensitiveTableName属性置为true,这样,就可以运行了
稍后会将代码整理出来一并上传。
关于unitils联合dbunit的测试的更多相关文章
- Unitils集成DBUnit、Spring-单元测试
Unitils集成DBUnit.Spring-单元测试 1.maven-pom文件中引入相关jar包 <!-- Unitils -dbunit.Spring --> <depende ...
- Unitils集成DBUnit、Spring-单元测试(转)
1.maven-pom文件中引入相关jar包 <!-- Unitils -dbunit.Spring --> <dependency> <groupId>org.u ...
- Unitils集成DBUnit的问题-解决方案
Unitils在集成DBunit时,如果数据库是mysql时,就会出现一些如下: org.unitils.core.UnitilsException: Error inserting test dat ...
- 用Unitils测试BaseDao遇到的问题总结
<Spring 3.0就这么简单>.(陈雄华,林开雄)第8章,对如何用Unitils进行测试简单介绍,下面是我用Unitils进行单元测试过程中遇到的问题的总结. 1.设置好pom.xml ...
- 使用Unitils测试DAO层
Spring 的测试框架为我们提供一个强大的测试环境,解决日常单元测试中遇到的大部分测试难题:如运行多个测试用例和测试方法时,Spring上下文只需创建一次:数据库现场不受破坏:方便手工指定Sprin ...
- 测试整合之王Unitils
16.4.1 Unitils概述(1) Unitils测试框架目的是让单元测试变得更加容易和可维护.Unitils构建在DbUnit与EasyMock项目之上并与JUnit和TestNG相结合.支持 ...
- dbunit进行DAO层Excel单元测试
DAO层测试难点 可重复性,每次运行单元测试,得到的数据是重复的 独立性,测试数据与实际数据相互独立 数据库中脏数据预处理 不能给数据库中数据带来变化 DAO层测试方法 使用内存数据库,如H2.优点: ...
- 单元测试工具 unitils
Unitils模块组件 Unitils通过模块化的方式来组织各个功能模块,采用类似于Spring的模块划分方式,如unitils-core.unitils-database.unitils-mock等 ...
- 基于dbunit进行mybatis DAO层Excel单元测试
DAO层测试难点 可重复性,每次运行单元测试,得到的数据是重复的 独立性,测试数据与实际数据相互独立 数据库中脏数据预处理 不能给数据库中数据带来变化 DAO层测试方法 使用内存数据库,如H2.优点: ...
随机推荐
- Unity3D屠龙战机项目总结
之前跟着老师后面边学边做了一个屠龙战机项目,在这个项目中,主要用到的技术,在这里总结一下(本次项目的脚本语言用的是JS): 1. 如果想在场景中导入一个声音文件,则需要在脚本中添加一个变量,如在脚本 ...
- 【转】Word中使用Endnote很卡解决方案
[转自]:http://blog.sina.com.cn/s/blog_4aee288a0101cxwb.html 文件→选项→校对→在word中更正拼写和语法时→键入时标记语法错误. 取消这个选项, ...
- 实现自己的脚本语言ngscript之零
正式开始介绍前先扯点没用的. 从小玩basic长大的小朋友大多有一个梦想,就是自己实现一个basic解释器. 不过这里我实现的不是basic,而是一个语法和功能类似javascript的东西. 暂且称 ...
- 【转】关于android的输入法弹出来 覆盖输入框的有关问题
今天发现一个问题,在录入信息页面.信息不多,但是输入法弹起后,内容已经超出页面,无滚动条,很不方便. 解决办法:在配置文件中,页面对应的Activity中添加 <activity android ...
- 数学常数e的含义
转载: http://www.ruanyifeng.com/blog/2011/07/mathematical_constant_e.html 作者: 阮一峰 日期: 2011年7月 9日 1. ...
- JavaScript之this指针深入详解
javascript中的this含义非常丰富,它可以是全局对象,当前对象或者是任意对象,这都取决于函数的调用方式.函数有以下几种调用方式:作为对象方法调用.作为函数调用.作为构造函数调用.apply或 ...
- 关于字符编码精简介绍 ANSI GB2312 UTF8 UNICODE
- CMS收集器
CMS收集周期 CMS并非没有暂停,而是用两次短暂停来替代串行标记整理算法的长暂停,它的收集周期是这样:初始标记(CMS-initial-mark) -> 并发标记(CMS-concurrent ...
- hdu5127 Dogs' Candies CDQ分治 动态凸包
传送门 题意 有三种操作 加入一个二元组\((x,y)\) 删除一个二元组\((x,y)\) 给出一个二元组\((a,b)\),问\(ax+by\)的最大值 题解 \(z=ax+by \Rightar ...
- JAVA IO详解
[案例1]创建一个新文件 1 2 3 4 5 6 7 8 9 10 11 import java.io.*; class hello{ public static void main(Stri ...