DbUnit - Предупреждение: AbstractTableMetaData - PullRequest
17 голосов
/ 15 октября 2010

Я использую DbUnit в последней версии 2.4.8, и я получаю много предупреждений в своих модульных тестах с таким сообщением:

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());
}

Но это не помогает избежать этих предупреждений.Что здесь не так?

Спасибо заранее и с наилучшими пожеланиями Тим.

Ответы [ 5 ]

29 голосов
/ 06 мая 2011

Я решил это с помощью информации из dbunit faq .Просто установив заводское свойство типа данных, предупреждение исчезло.

    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());
7 голосов
/ 29 марта 2017

С Spring-Boot вы можете использовать такой конфигурационный компонент

@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;
    }
}
4 голосов
/ 10 февраля 2014

Я знаю, что это старая ветка, но все ответы здесь более сложные, чем должны быть.

Самый простой способ выполнить настройку по умолчанию для каждого подключения - это поставить OperationListener и реализовать метод connectionRetrieved, чтобы ты хочешь. Нет необходимости в переопределении; слушатель будет вызываться каждый раз, когда получено IDatabaseConnection.

3 голосов
/ 20 мая 2012

Я использовал драйвер JTDS и MS SQL 2008. В моем классе DBUntiTest переопределите следующий метод.Сообщение исчезло.

@Override
protected void setUpDatabaseConfig(DatabaseConfig config) {
    config.setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, new MsSqlDataTypeFactory());
}
1 голос
/ 04 сентября 2014

@ Ответ reassembler точный.Просто добавлю, что я тестирую на разных продуктах баз данных, поэтому теперь я устанавливаю DataType Factory в соответствии с текущим соединением:

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; 
}

Вы можете явно добавить любые дополнительные базы данных в этот список.

...