zoukankan      html  css  js  c++  java
  • 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的情况下,以及解决方案~

  • 相关阅读:
    数组分组问题
    Python自然语言处理学习笔记(17):3.1 从Web和Disk上访问文本
    求任意整数的200次平方的末两位
    Python自然语言处理学习笔记(16):2.8 Exercises 练习
    Python自然语言处理学习笔记(15):2.7 Further Reading 深入阅读
    Python:urllib 和urllib2之间的区别
    Python自然语言处理学习笔记(4):1.2 进一步学习Python:将文本视作单词列表
    我中招了:解喝汽水问题
    [导入]一组与Mother相关的有趣的英语词组
    [导入]金秋湖大回忆之旅20051113
  • 原文地址:https://www.cnblogs.com/candle806/p/3807590.html
Copyright © 2011-2022 走看看