2.4.20. Anpassen von DbUnit-Properties und Features

DbUnit bietet eine Reihe von Konfigurationsmöglichkeiten, die ausführlich in [DbUnit-Properties, 2010] beschrieben sind. Checkerberry db bietet die Möglichkeit Properties und Features von DbUnit direkt über die Methode setProperty zu setzen.

DbUnit verwendet Properties um beliebige Werte zu setzen, während Features als Schalter verwendet werden. Für Features sind daher lediglich die Werte true oder false erlaubt.

Beispiel 2.55. Setzen von DbUnit-Properties und -Features.

public class ConfigurationCallback implements DbConfigurationCallback {
  public void configure(DbConfiguration configuration) {

    // Setzen des Properties batchSize auf den Wert 50.
    configuration.setProperty(DatabaseConfig.PROPERTY_BATCH_SIZE,
        Integer.valueOf(50));
    // Setzen des Features dataTypeWarning auf false.
    configuration.setProperty(DatabaseConfig.FEATURE_DATATYPE_WARNING,
        false);

    // Setzen der DataTypeFactory für die entsprechende Datenbank.
    configuration.setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY,
        new PostgresqlDataTypeFactory());
    // Setzen der ForwardOnlyResultSetTableFactory für die Behandlung von
    // großen Datenmengen.
    configuration.setProperty(
        DatabaseConfig.PROPERTY_RESULTSET_TABLE_FACTORY,
        new ForwardOnlyResultSetTableFactory());
    …
  }
}


Das Code-Beispiel zeigt exemplarisch das Setzen eines Properties (DatabaseConfig.PROPERTY_BATCH_SIZE) und eines Features (DatabaseConfig.FEATURE_DATATYPE_WARNING) in DbUnit.

Des Weiteren werden die beiden Properties DatabaseConfig.PROPERTY_DATATYPE_FACTORY und DatabaseConfig.PROPERTY_RESULTSET_TABLE_FACTORY gesetzt. Die Klasse org.dbunit.database.DatabaseConfig enthält Konstanten für alle IDs der DbUnit-Properties und -Features, sodass die explizite Angabe der Property-ID nicht erforderlich ist.

Das Property DatabaseConfig.PROPERTY_DATATYPE_FACTORY muss gemäß der verwendeten Datenbank gesetzt werden. Aktuell werden die folgenden Datenbanken unterstützt:

Für das Property DatabaseConfig.PROPERTY_RESULTSET_TABLE_FACTORY gibt es zwei Ausprägungen: CachedResultSetTableFactory und ForwardOnlyResultSetTableFactory, wobei CachedResultSetTableFactory voreingestellt ist. Die CachedResultSetTableFactory lädt alle Daten in den Speicher, sodass diese Factory für große Datenmengen nicht geeignet ist. Dies betrifft insbesondere die Erstellung von großen Datenbank-Dumps. In diesem Fall sollte man die Factory temporär auf ForwardOnlyResultSetTableFactory umstellen. Zusätzlich kann es erforderlich sein, dass der Heap-Size des Tests über die JVM-Argumente – Xms und – Xmx erhöht werden muss.