Unitils集成DBUnit的问题-解决方案
Unitils在集成DBunit时,如果数据库是mysql时,就会出现一些如下:
org.unitils.core.UnitilsException: Error inserting test data from DbUnit dataset for method......
org.dbunit.dataset.NoSuchColumnException......
出现如上两个报错的原因是:unitils默认使用的是“DefaultMetadataHandler.java”这个类去加载数据库信息,从而得不到数据库schema的值,DefaultMetadataHandler.java中的实现代码如下:
boolean areEqual =
areEqualIgnoreNull(catalog, catalogName, caseSensitive) &&
areEqualIgnoreNull(schema, schemaName, caseSensitive) &&
areEqualIgnoreNull(table, tableName, caseSensitive) &&
areEqualIgnoreNull(column, columnName, caseSensitive);
这个时候的schemaName是空的,但是传进来的schema是有值的,从而报错!
解决方案两种:
1、改源代码,去掉catalog和schema的比较
2、写一个拓展类,去继承DbUnitModule,代码如下:

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-core的jar包下的unitils-default.properties文件,
unitils.module.dbunit.className=org.unitils.dbunit.DbUnitModule 更改为如下:
unitils.module.dbunit.className=org.unitils.dbunit.MySqlDbUnitModule
如果你使用自己定义的配置文件unitils.properties,则只需要修改自定义配置文件即可,就可以不需要修改jar中的unitils-default.properties
当然出现这些问题的前提是所用数据库是mysql的情况下,以及解决方案~
转载:http://www.cnblogs.com/candle806/p/3807590.html
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据说测试的能力很强大,可测试dao,service,web层,其实对数据库的测试我更关心,看到有人展示了测试的方法,数据直接写在xls表中,很直观,然后就依照他们的方法进行试验,花费的时 ...
- DataPipeline CTO陈肃:从ETL到ELT,AI时代数据集成的问题与解决方案
引言:2018年7月25日,DataPipeline CTO陈肃在第一期公开课上作了题为<从ETL到ELT,AI时代数据集成的问题与解决方案>的分享,本文根据陈肃分享内容整理而成. 大家好 ...
- SAP开源的持续集成-持续交付的解决方案
SAP开源的持续集成/持续交付的解决方案: (1) 一个叫做piper的github项目,包含一个针对Jenkins的共享库和一个方便大家快速搭建CI/CD环境的Docker镜像: (2) 一套SAP ...
- 测试整合之王Unitils
16.4.1 Unitils概述(1) Unitils测试框架目的是让单元测试变得更加容易和可维护.Unitils构建在DbUnit与EasyMock项目之上并与JUnit和TestNG相结合.支持 ...
- 单元测试工具 unitils
Unitils模块组件 Unitils通过模块化的方式来组织各个功能模块,采用类似于Spring的模块划分方式,如unitils-core.unitils-database.unitils-mock等 ...
- Oracle 数据集成的实际解决方案
就针对市场与企业的发展的需求,Oracle公司提供了一个相对统一的关于企业级的实时数据解决方案,即Oracle数据集成的解决方案.以下的文章主要是对其解决方案的具体描述,望你会有所收获. Oracle ...
- 用Unitils测试BaseDao遇到的问题总结
<Spring 3.0就这么简单>.(陈雄华,林开雄)第8章,对如何用Unitils进行测试简单介绍,下面是我用Unitils进行单元测试过程中遇到的问题的总结. 1.设置好pom.xml ...
随机推荐
- Leetcode 189 Rotate Array stl
题意:将数组旋转k次,如将数组[1,2,3,4,5]旋转1次得到[2,3,4,5,1],将数组[1,2,3,4,5]旋转2次得到[3,4,5,1,2]..... 本质是将数组分成两部分a1,a2,.. ...
- Leetcode 326 Power of Three 数论
判断一个数是否是3的n次幂 这里我用了一点巧,所有的int范围的3的n次幂是int范围最大的3的n次幂数(即3^((int)log3(MAXINT)) = 1162261467)的约数 这种方法是我 ...
- Android 开发:view的几种布局方式及实践
View的几种布局显示方法,以后就不会在针对布局方面做过多的介绍.View的布局显示方式有下面几种:线性布局(Linear Layout).相对布局(Relative Layout).表格布局(Tab ...
- javaWEB项目感受
1.WEB-INF下的内容是受保护的,不能直接访问,可以通过转发的方式访问. 2.OGNL技术: 对象图像导航语言,是一种功能强大的表达式语言.可以让我们用非常简单的表达式访问对象层. OGNL引擎访 ...
- 巧用Windows 7计划任务设置定时提醒
Windows 7系统有个“计划任务”功能,一般人都很少使用.其实,“计划任务”是系统自带的一个很实用的功能,比如说,这个功能可以设置定时提醒,这样在使用电脑时就不会因为太过投入而导致错过重要的事务. ...
- nginx是一个反向代理的软件
nginx只是一个反向代理的软件,和语言无关,理论上支持任何Web平台,当然http://Asp.net也不例外,http://51aspx.com就是http://Asp.net开发的,前端暴漏的是 ...
- Activiti 流程实例、任务、执行对象及相关的表
一个流程中,流程实例只有一个,执行对象可以有多个(如果存在分支和聚合) SELECT * FROM activiti.act_ru_execution a; #正在执行的执行对象表 SELECT * ...
- 扩展easyui 的表单验证
easyui 的validatebox()提供了自定义验证的方法,为此我把一些常用的数据验证汇总了一下,代码如下: 代码 $.extend($.fn.validatebox.defaults.rule ...
- CentOS下httpd下php 连接mysql 本机可以,127.0.0.1不能访问
你看到的这个文章来自于http://www.cnblogs.com/ayanmw php代码很简单: $server="127.0.0.1"; println("Begi ...
- vi命令示例大全
1. 进入vi l vi filename: 打开或新建文件,并将光标置于第一行首 l vi +n filename:打开文件,并将光标置于第n行首 l vi + filename:打开文件 ...