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

  Unitils在集成DBunit时,若是数据库是mysql时,就会出现一些以下:java

  org.unitils.core.UnitilsException: Error inserting test data from DbUnit dataset for method......mysql

  org.dbunit.dataset.NoSuchColumnException......sql

  出现如上两个报错的缘由是: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是有值的,从而报错!ide

  解决方案两种:spa

  一、改源代码,去掉catalog和schema的比较code

  二、写一个拓展类,去继承DbUnitModule,代码以下:  blog

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 更改成以下:get

  unitils.module.dbunit.className=org.unitils.dbunit.MySqlDbUnitModule

  若是你使用本身定义的配置文件unitils.properties,则只须要修改自定义配置文件便可,就能够不须要修改jar中的unitils-default.properties

  固然出现这些问题的前提是所用数据库是mysql的状况下,以及解决方案~

相关文章
相关标签/搜索