DBUnit:如何正确更改属性值?

时间:2016-11-16 10:33:44

标签: dbunit

我遇到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属性......

3 个答案:

答案 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);
    }