我遇到DBUnit(V2.5.3)的问题,我想将属性FEATURE_ALLOW_EMPTY_FIELDS
设置为true
,但DBUnit会忽略此设置。我设置属性的代码是:
DatabaseConfig dbCfg = null;
try {
dbCfg = dbTester.getConnection().getConfig();
dbCfg.setProperty(DatabaseConfig.FEATURE_ALLOW_EMPTY_FIELDS, Boolean.TRUE);
System.out.println("getCfg -> " + dbTester.getConnection().getConfig().getProperty(DatabaseConfig.FEATURE_ALLOW_EMPTY_FIELDS));
System.out.println("dbCfg -> " + dbCfg.getProperty(DatabaseConfig.FEATURE_ALLOW_EMPTY_FIELDS));
} catch (Exception exc) {
exc.printStackTrace();
}
我认为问题是新值只设置为dbCfg
对象。但似乎DBUnit没有使用这个对象,因为上面代码的输出是:
getCfg -> false
dbCfg -> true
看起来好像我太傻了,无法理解如何正确设置DBUnit属性......
答案 0 :(得分:1)
问题是onClick(...)
似乎每次调用都返回一个新的IDatabaseConnection对象。我认为每次返回相同的连接对象时都会返回。
修改强>
@ JavaDev1987:记住IDatabaseTester.getConnection()
返回的对象。例如,使用以下代码代替我在我的问题中发布的代码:
IDatabaseTester.getConnection()
重要的是,您不能再次调用IDatebaseConnection dbConn = null;
DatabaseConfig dbCfg = null;
try {
dbConn = dbTester.getConnection(); // <-- get DBConnection
dbCfg = dbConn.getConfig(); // use dbConn instead calling 'dbTester.getConnection()'
dbCfg.setProperty(DatabaseConfig.FEATURE_ALLOW_EMPTY_FIELDS, Boolean.TRUE);
// in next line: use here also dbConn instead calling 'dbTester.getConnection()'
System.out.println("getCfg -> " + dbConn.getConfig().getProperty(DatabaseConfig.FEATURE_ALLOW_EMPTY_FIELDS));
System.out.println("dbCfg -> " + dbCfg.getProperty(DatabaseConfig.FEATURE_ALLOW_EMPTY_FIELDS));
} catch (Exception exc) {
exc.printStackTrace();
}
,因为这将创建并返回一个新的数据库连接(使用新的未更改的默认配置)。那是我写的。
答案 1 :(得分:0)
我注意到里面有一个OperationListener,它是在Connection对象生成后触发的。这是我做的事情:我添加了CustomConfigurationOperationListener:
public class CustomConfigurationOperationListener extends DefaultOperationListener implements IOperationListener{
@Override
public void connectionRetrieved(IDatabaseConnection iDatabaseConnection) {
super.connectionRetrieved(iDatabaseConnection);
iDatabaseConnection.getConfig().setProperty(DatabaseConfig.FEATURE_ALLOW_EMPTY_FIELDS, true);
}
}
然后在dbTester上进行设置:
dbTester.setOperationListener(new CustomConfigurationOperationListener());
这样,我们将在生成连接之后以及创建数据集之前覆盖配置。
答案 2 :(得分:0)
setUpDatabaseConfig()
类中有一个称为DatabaseTestCase
的方法,因此我认为设置此属性的预期方法是在您的类中添加以下方法:
@Override
protected void setUpDatabaseConfig(DatabaseConfig config) {
config.setProperty(DatabaseConfig.FEATURE_ALLOW_EMPTY_FIELDS, true);
}