19

最新バージョン2.4.8でDbUnitを使用していますが、ユニットテストで次のメッセージとともに多くの警告が表示されます。

WARN : org.dbunit.dataset.AbstractTableMetaData - 
Potential problem found: The configured data type factory 
    'class org.dbunit.dataset.datatype.DefaultDataTypeFactory' 
     might cause problems with the current database 'MySQL' (e.g. some datatypes may 
     not be supported properly). In rare cases you might see this message because the 
     list of supported database products is incomplete (list=[derby]). If so please 
     request a java-class update via the forums.If you are using your own 
     IDataTypeFactory extending DefaultDataTypeFactory, ensure that you override 
     getValidDbProducts() to specify the supported database products.

だから私はこれを追加すると思いました(私はMySQLデータベースを使用しています):

protected void setUpDatabaseConfig(DatabaseConfig config) {
    config.setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, new MySqlDataTypeFactory());
}

しかし、これはこれらの警告を回避するのに役立ちません。ここで何が問題になっていますか?

よろしくお願いします。ティム。

4

6 に答える 6

34

私はdbunitのよくある質問からの情報でこれを解決しまし。データ型のファクトリプロパティを設定するだけで、警告が消えました。

    Connection dbConn = template.getDataSource().getConnection();

    IDatabaseConnection connection = new DatabaseConnection(dbConn, "UTEST", false);

    DatabaseConfig dbConfig = connection.getConfig();

    // added this line to get rid of the warning
    dbConfig.setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, new OracleDataTypeFactory());
于 2011-05-06T15:49:07.250 に答える
9

Spring-Bootを使用すると、このような構成Beanを使用できます。

@Configuration
public class DbUnitConfiguration {

@Autowired
private DataSource dataSource;

@Bean
public DatabaseDataSourceConnectionFactoryBean dbUnitDatabaseConnection() {
    DatabaseConfigBean bean = new DatabaseConfigBean();
    bean.setDatatypeFactory(new MySqlDataTypeFactory());

    DatabaseDataSourceConnectionFactoryBean dbConnectionFactory = new DatabaseDataSourceConnectionFactoryBean(dataSource);
    dbConnectionFactory.setDatabaseConfig(bean);
    return dbConnectionFactory;
    }
}
于 2017-03-29T15:27:03.143 に答える
4

これは古いスレッドですが、ここでのすべての答えは必要以上に複雑です。

すべての接続取得でファクトリの設定を実行する最も簡単な方法は、を提供し、そのメソッドをOperationListener実装して、必要なことを実行することです。connectionRetrievedオーバーライドは必要ありません。IDatabaseConnectionリスナーは、が取得されるたびに呼び出されます。

于 2014-02-10T19:20:20.867 に答える
3

JTDSドライバーとMSSQL2008を使用していました。DBUntiTestクラスで、次のメソッドをオーバーライドします。警告メッセージが消えました。

@Override
protected void setUpDatabaseConfig(DatabaseConfig config) {
    config.setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, new MsSqlDataTypeFactory());
}
于 2012-05-19T22:16:57.283 に答える
1

@reassemblerの答えは的確です。さまざまなデータベース製品に対してテストしていることを付け加えると、現在の接続に従ってDataTypeFactoryを設定します。

private IDatabaseConnection getConnection(Connection jdbcConnection) throws Exception {
    String databaseProductName = jdbcConnection.getMetaData().getDatabaseProductName();

    DatabaseConnection databaseConnection = new DatabaseConnection(jdbcConnection);
    DatabaseConfig dbConfig = databaseConnection.getConfig();

    switch (databaseProductName) {
    case "HSQL Database Engine":
        dbConfig.setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, new HsqldbDataTypeFactory());
        break;
    case "MySQL":
        dbConfig.setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, new MySqlDataTypeFactory());
        break;
    default:
        log.warn("No matching database product found when setting DBUnit DATATYPE_FACTORY");
    }

    return databaseConnection; 
}

もちろん、このリストにデータベースを追加することもできます。

于 2014-09-04T08:29:33.687 に答える
0

Dbunitバージョン2.7.0を使用しています。私の場合、@Testでデータ型ファクトリプロパティを設定するだけでは不十分です。dbunit JdbcDatabaseTester.onsetup()メソッドを呼び出すと、警告が続きます。

JdbdDatabaseTesterを拡張するMyJdbcDatabaseTesterを実装し、メソッドgetConnection()をオーバーライドして、データ型ファクトリプロパティを構成する問題を解決しました。

public class MyJdbcDatabaseTester extends JdbcDatabaseTester {

public MyJdbcDatabaseTester(String driverClass, String connectionUrl, String username,
                            String password )
        throws ClassNotFoundException {
    super( driverClass, connectionUrl, username, password );
}

@Override
public IDatabaseConnection getConnection() throws Exception {
    IDatabaseConnection result = super.getConnection();
    DatabaseConfig dbConfig = result.getConfig();
    //to supress warnings when accesing to database
    dbConfig.setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, new MySqlDataTypeFactory());
    return result;
}

}

次に、テストでJdbcDatabaseTesterの代わりにMyJcbdDatabaseTesterを使用します

于 2021-04-09T16:20:55.223 に答える