Unitils統合DBUnitの問題-ソリューション
3746 ワード
UnitilsはDbunitを統合する際、データベースがmysqlの場合、次のように表示されます.
org.unitils.core.UnitilsException: Error inserting test data from DbUnit dataset for method......
org.dbunit.dataset.NoSuchColumnException......
上記の2つのエラーの原因は、unitilsがデフォルトで「DefaultMetadataHandler.java」というクラスを使用してデータベース情報をロードし、データベースschemaの値が得られないためです.JAvaの実装コードは次のとおりです.
この時のschemaNameは空いていましたが、伝わってきたschemaは価値があるので、間違えました!
ソリューションの2つ:
1、ソースコードを変更し、catalogとschemaの比較を取り除く
2、開拓クラスを書き、DbUnitModuleを継承する.コードは以下の通りである.
次に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の場合、およびソリューション~
org.unitils.core.UnitilsException: Error inserting test data from DbUnit dataset for method......
org.dbunit.dataset.NoSuchColumnException......
上記の2つのエラーの原因は、unitilsがデフォルトで「DefaultMetadataHandler.java」というクラスを使用してデータベース情報をロードし、データベースschemaの値が得られないためです.JAvaの実装コードは次のとおりです.
boolean areEqual =
areEqualIgnoreNull(catalog, catalogName, caseSensitive) &&
areEqualIgnoreNull(schema, schemaName, caseSensitive) &&
areEqualIgnoreNull(table, tableName, caseSensitive) &&
areEqualIgnoreNull(column, columnName, caseSensitive);
この時のschemaNameは空いていましたが、伝わってきたschemaは価値があるので、間違えました!
ソリューションの2つ:
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の場合、およびソリューション~