Pregunta

Estoy utilizando DbUnit en la última versión 2.4.8 y me da muchas advertencias en mis pruebas unitarias con este mensaje:

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.

Así que pensé que añadir (utilizo una base de datos MySQL):

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

Sin embargo, esto no ayuda a evitar estas advertencias. Lo que está mal aquí?

Gracias de antemano y Saludos cordiales Tim.

¿Fue útil?

Solución

He resuelto esto con información de la DBUnit FAQ . Sólo estableciendo la propiedad de la fábrica tipo de datos hizo la advertencia desaparezca.

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

Otros consejos

Primavera-Boot puede utilizar como frijol de configuración

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

Sé que esto es un hilo viejo, pero todas las respuestas aquí son más complicadas de lo que necesitan ser.

La forma más sencilla de lograr el establecimiento de la fábrica en cada adquisición conexión es a suministro un OperationListener e implementar su connectionRetrieved método para hacer lo que quiera. No se necesita Alteración temporal; el oyente se invoca cada vez que un IDatabaseConnection se adquiere.

Yo estaba usando conductor jTDS y MS SQL 2008. En mi clase de anulación DBUntiTest el siguiente método. El mensaje Waring desapareció.

@Override
protected void setUpDatabaseConfig(DatabaseConfig config) {
    config.setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, new MsSqlDataTypeFactory());
}
respuesta

@ de reensamblador en el clavo. Sólo añadir que estoy probando diferentes productos contra la base de datos, por lo que ahora establecido de fabrica Tipo de datos de acuerdo a la conexión actual:

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

Usted, evidentemente, puede añadir cualquier base de datos adicionados a esta lista.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top