开发者社区> 指尖的舞曲> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Unitils集成DBUnit的问题-解决方案

简介:   Unitils在集成DBunit时,如果数据库是mysql时,就会出现一些如下:   org.unitils.core.UnitilsException: Error inserting test data from DbUnit dataset for method.
+关注继续查看

  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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
antd pro与spring boot集成开发平台搭建
antd pro与spring boot集成开发平台搭建
0 0
若依管理平台-添加MybatisPlus
最近的项目中使用使用一个电子 签章,在寻找框架中,选择了若依管理平台,在使用中发现这个管理平台使用的是Mybatis,在添加Mybatisplus时,碰到了一些问题,在此记录。
0 0
Drools集成CDI(一)
Drools集成CDI(一)
0 0
Drools集成CDI(二)
Drools集成CDI(二)
0 0
使用 SAP Uiveri5 遇到 passport 依赖的问题以及解决方案
使用命令行 cds run 启动 Fiori 应用,遇到下列错误消息: Unable to require required package/file: passport
0 0
Java版Spring Cloud B2B2C o2o鸿鹄云商平台--部署架构
上一篇文章我们介绍了鸿鹄云商b2b2c o2o基础的部署方案,考虑到项目部署中架构拓展性、伸缩性、可用性、安全性、开放性、准确性、可维护性的特点,我们针对鸿鹄云商平台b2b2c制定整体部署架构方案,我这里不做更多的介绍,直接上图,希望能通过部署架构图让更多的读者理解。
1176 0
(六)整合spring cloud云服务架构 - 企业云架构common-service代码结构分析
(六)整合spring cloud云服务架构 - 企业云架构common-service代码结构分析 particle-commonservice-apigateway:API网关通用服务项目,所有的请求首先会经过这个网关。
1539 0
使用Slf4j集成Log4j2构建项目日志系统的完美解决方案
一、背景   最近因为公司项目性能需要,我们考虑把以前基于的log4j的日志系统重构成基于Slf4j和log4j2的日志系统,因为,使用slf4j可以很好的保证我们的日志系统具有良好的兼容性,兼容当前常见几种日志系统,而使用log4j2而不是log4j是因为Log4j 1.x 在高并发情况下出现死锁导致cpu使用率异常飙升,而Log4j2.0基于LMAX Disruptor的异步日志在多线程环境下性能会远远优于Log4j 1.x和logback(官方数据是10倍以上)。
996 0
+关注
指尖的舞曲
目前在阿里巴巴搬砖
文章
问答
文章排行榜
最热
最新
相关电子书
更多
React Native 全量化实践—web 技术打造移动研发新模式
立即下载
Jpom一款低侵入式Java运维、监控软件
立即下载
低代码开发师(初级)实战教程
立即下载