DBUnit PostgresqlDataTypeFactory不识别枚举列表
我使用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常见问题,看到这个问题,说我必须重写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());
}
但我仍然得到同样的错误,我不知道为什么。 也许我没有压倒一切的方法? 也许这不是我的问题的原因? 如果你需要任何其他代码请问,谢谢!
尝试坚持枚举的价值
enum.values();
它会返回一个数组,而不是你保存这个元素
那么......我无法完全解决这个问题,但是设法通过解决方法解决了这个问题。
这个错误是由于@DatabaseSetup批注引起的。 如果我在不使用它的情况下执行了这个过程,它仍然会抛出'列未被识别'的错误,因为它不能识别postgres数组(这是我的根本原因),但是我可以通过创建一个新的DataTypeFactory来解决它从默认的一个:
public class PsqlArrayDataTypeFactory extends DefaultDataTypeFactory {
public DataType createDataType(int sqlType, String sqlTypeName) throws DataTypeException {
if (sqlType == Types.ARRAY)
{
return DataType.VARCHAR;
}
return super.createDataType(sqlType, sqlTypeName);
}
}
对postgresql枚举的支持有限,因为自从dbunit 2.4.6以来只支持读写字符串。 要做到这一点,你必须重写PostgresqlDataTypeFactory中的方法“isEnumType”,如下所示:
PostgresqlDataTypeFactory factory = new PostgresqlDataTypeFactory(){
public boolean isEnumType(String sqlTypeName) {
if(sqlTypeName.equalsIgnoreCase("abc_enum")){
return true;
}
return false;
}
};
链接地址: http://www.djcxy.com/p/92341.html
上一篇: DBUnit PostgresqlDataTypeFactory does not recognizes enum list