Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 设置IDatabaseConnection(HSQLDB)的数据库配置属性时出错_Postgresql_Unit Testing_Integration Testing_Hsqldb_Dbunit - Fatal编程技术网

Postgresql 设置IDatabaseConnection(HSQLDB)的数据库配置属性时出错

Postgresql 设置IDatabaseConnection(HSQLDB)的数据库配置属性时出错,postgresql,unit-testing,integration-testing,hsqldb,dbunit,Postgresql,Unit Testing,Integration Testing,Hsqldb,Dbunit,我在下面包含了完全可测试的代码,当提供包含空字段的数据集xml时,会产生以下错误。下面还有一个示例dataset.xml java.lang.IllegalArgumentException:table.column=places.CITY值为 空,但必须包含一个值(要禁用此功能检查,请设置 DatabaseConfig.FEATURE_允许_空_字段为true) 该线程类似,但不同,因为它使用多个dbTester.getConnection(),而我的代码只使用一个,但有相同的错误。主要问题与

我在下面包含了完全可测试的代码,当提供包含空字段的数据集
xml
时,会产生以下错误。下面还有一个示例
dataset.xml

java.lang.IllegalArgumentException:table.column=places.CITY值为 空,但必须包含一个值(要禁用此功能检查,请设置 DatabaseConfig.FEATURE_允许_空_字段为true)

该线程类似,但不同,因为它使用多个
dbTester.getConnection()
,而我的代码只使用一个,但有相同的错误。主要问题与此行有关
databaseConfig.setProperty(databaseConfig.FEATURE\u ALLOW\u EMPTY\u FIELDS,Boolean.TRUE)
这似乎被完全忽视了。我已尝试将
init
代码放入
@Test
方法中,但错误仍然存在

dataset.xml

<?xml version='1.0' encoding='UTF-8'?>
<dataset>
  <places address="123 Up Street" city="Chicago" id="001"/>
  <places address="456 Down Street" city="" id="002"/>
  <places address="789 Right Street" city="Boston" id="003"/>
</dataset>

编辑(根据塞萨尔·罗德里格斯的回答): 我现在在父类中重构了此方法:

 protected void setUpDatabaseConfig(DatabaseConfig databaseConfig) {
        databaseConfig.setProperty(DatabaseConfig.FEATURE_ALLOW_EMPTY_FIELDS, Boolean.TRUE);
    }
创建了一个子类,它覆盖了这个方法,但它说这个子类没有被使用。如何在父类中处理这个类(DBConnectionOverride),以解决我的问题

class DBConnectionOverride extends DBConnectionIT {
    @Override
    protected void setUpDatabaseConfig(DatabaseConfig databaseConfig) {
        databaseConfig.setProperty(DatabaseConfig.FEATURE_ALLOW_EMPTY_FIELDS, true);
    }
}

您必须重写方法setUpDatabaseConfig(DatabaseConfig config),如下所示:

@Override
protected void setUpDatabaseConfig(DatabaseConfig config) {
    config.setProperty(DatabaseConfig.FEATURE_ALLOW_EMPTY_FIELDS, true); 
}
希望对我有帮助,这是工作:

        IDatabaseConnection dbConn = new DatabaseDataSourceConnection(getDataSource());
        dbConn.getConfig().setProperty(DatabaseConfig.FEATURE_ALLOW_EMPTY_FIELDS, true);
        DatabaseOperation.CLEAN_INSERT.execute(dbConn, getiDataSet(loadDBData.source()));

我偶然发现了正确的答案,至少解决了我的问题。它始终与这一行相关
databaseTester.onSetup()
,可以简单地用
DatabaseOperation.CLEAN\u INSERT.execute(iConn,dataSet)替换它。请随意评论为什么这似乎修复了错误。

仔细查看您链接的问题。在设置FEATURE_ALLOW_EMPTY_FIELDS属性之后,似乎需要使用iConn作为连接。似乎不需要调用iConn.getConnection()。@fredt,感谢您的反馈。我不明白为什么您会说,
似乎不需要调用iConn.getConnection()
,因为准备好的语句需要
连接
而不是
IDatabaseConnection
。如果我只是在那些prepare语句中传入
IDatabaseConnection.getConnection()
,它将返回相同的错误。您能将您的建议实现到我提供的代码库中吗?我完全不知所措,总是这一行导致错误:
databaseTester.onSetup()@Nova我不能用你的例子。我只是给你指路。谢谢@César,但我不知道该把这个
@覆盖
放在哪里。你能用我提供的代码告诉我最终的代码应该是什么样子吗?我提取了行
databaseConfig.setProperty(databaseConfig.FEATURE\u ALLOW\u EMPTY\u字段,Boolean.TRUE)放入代码建议的方法中,然后我将您的
@Override
方法放入子类中,但它告诉我我的子类(我将其命名为DBConnectionOverride)没有在任何地方使用。我编辑了我的问题来展示这个。。。怎么了?我想您可以将覆盖方法放在
DBConnectionIT
类中。无论如何,如果要创建一个新类,如
DBConnectionOverride
,则该类不应扩展
DBConnectionIT
类。扩展
DBConnectionOverride
的类是
dbconnectionOnOverride
不起作用的,如果超类扩展子类,则
@Override
方法返回此错误
方法不从其超类重写方法。如果子类
扩展了超类,则此错误将消失,但是子类将变灰(未使用)。如果您可以使用我在问题中提供的代码使其工作,然后在此处共享,我将奖励您+1。我似乎完全没有使用
覆盖
,就解决了自己的问题。无论如何,谢谢。当使用
DatabaseOperation.CLEAN\u INSERT.execute(iConn,dataSet)时,我无法重现您的结果在我的上下文中。您是否能够使用我提供的代码库提供解决方案?如果是的话,我会给你打勾。谢谢导致错误的总是这一行:
databaseTester.onSetup()你有没有再看这个?我可以在日志中看到,DbUnit获得了一个iConn,并将配置设置为
FEATURE\u ALLOW\u EMPTY\u FIELDS
=true,但随后将其与其他几个功能一起初始化为false。在我看来这是一个bug,但如果这对您有效,我的分析就没有意义了……我将错误跟踪到了
DataSourceDatabaseTester
,它在每个
getConnection()
调用上实例化了一个新的
数据库连接,如果您调用
DatabaseTester.onSetup()
,它将被提供一个新的
DatabaseConnection
实例,该实例在构造函数中为自己创建一个新的
DatabaseConfig
实例,从而忽略您使用
ALLOW\u EMPTY\u字段初始化的任何
DatabaseConfig
实例。缺陷不确定。显然,从未以这种方式进行配置。此配置的唯一位置是在DbUnit的Ant相关代码中使用的。我想我必须访问dbunit用户ML。
        IDatabaseConnection dbConn = new DatabaseDataSourceConnection(getDataSource());
        dbConn.getConfig().setProperty(DatabaseConfig.FEATURE_ALLOW_EMPTY_FIELDS, true);
        DatabaseOperation.CLEAN_INSERT.execute(dbConn, getiDataSet(loadDBData.source()));