博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Unitils集成DBUnit的问题-解决方案
阅读量:6230 次
发布时间:2019-06-21

本文共 2056 字,大约阅读时间需要 6 分钟。

  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

你可能感兴趣的文章
查看django版本的方法
查看>>
kafka channle的应用案例
查看>>
WPF 圆角textbox
查看>>
熊彼特的创新理论:非连续性模型
查看>>
Windows10内置ubuntu子系统安装后中文环境设置
查看>>
Spring Security教程(八):用户认证流程源码详解
查看>>
由浅入深:CNN中卷积层与转置卷积层的关系
查看>>
Solve Error: "errcode": 40016, "errmsg": "invalid button size hint"
查看>>
EF Core Fluent API
查看>>
MAC 设置环境变量path的几种方法
查看>>
JVM垃圾收集器(2)
查看>>
SpringBoot之hello world!
查看>>
Socket拆包和解包
查看>>
工作之忠、智、勇
查看>>
电子书下载:Beginning Nokia Apps Development: Using MeeGo, Mobile QT and OpenSymbian
查看>>
mysql 5.0存储过程学习总结
查看>>
matlab练习程序(Ritter‘s最小包围圆)
查看>>
SQL存储过程教程
查看>>
最详细的临时表,表变量的对比
查看>>
C#中直接打印Report文件(rdlc)
查看>>