【发布时间】:2016-10-25 16:18:36
【问题描述】:
我正在使用 DBUnit 进行集成测试,在执行测试代码之前我遇到了这个错误:
badges.track_types data type (2003, '_text') not recognized and will be ignored. See FAQ for more information.
org.dbunit.dataset.NoSuchColumnException: badges.TRACK_TYPES - (Non-uppercase input column: track_types) in ColumnNameToIndexes cache map. Note that the map's column names are NOT case sensitive.
被忽略的列是枚举列表。 在数据集中它是这样写的:
<?xml version='1.0' encoding='UTF-8'?>
<dataset>
// More info ...
<badges name="30'000" description="30k a day" image_name="30000.png" threshold_val="30000.00000000" has_many="true" id="45" track_types="{TRACK_GENERIC}" "/>
</dataset>
我查看了 DBUnit FAQ 并看到了 this issue ,说我必须重写 isEnumType() 方法以支持我的枚举是 Postgresql,所以我这样做了:
/**
* Override method to set custom properties/features
*/
protected void setUpDatabaseConfig(DatabaseConfig config) {
config.setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, new PostgresqlDataTypeFactory(){
public boolean isEnumType(String sqlTypeName) {
if(sqlTypeName.equalsIgnoreCase("track_types")){
return true;
}
return false;
}
});
config.setProperty(DatabaseConfig.PROPERTY_METADATA_HANDLER, new DefaultMetadataHandler());
}
但我仍然得到同样的错误,我不知道为什么。也许我没有很好地覆盖该方法?也许这甚至不是我问题的原因? 如果您需要任何其他代码,请询问,谢谢!
【问题讨论】:
-
您的数据集
badges是否包含TRACK_TYPES列? -
你能把你的源代码发给我吗?我会尝试深入研究它。
-
@KevinWallis 我刚刚更新了问题,以便您可以看到数据集行。是的,它包含该列,但由于错误状态而被忽略。
-
@IvanUrsul 你到底需要什么?那是涉及问题的源代码,我分享它没有问题,但是请让我知道您需要的部分,这样我就不会把问题搞得太大了。非常感谢!
标签: java postgresql enums integration-testing dbunit