2.4.11. Datenbank durch Annotation leeren

Beim Einspielen der initialen Testdaten leert checkerberry db alle Tabellen, die in der DTD definiert sind. Danach werden die initialen Testdaten eingespielt. Möchte man einen Test mit leerer Datenbank starten, kann man somit eine Datei mit leeren Initialdaten angeben. Alternativ kann man die Annotation ClearTables nutzen. Die Verwendung der Annotation hat den Vorteil, dass die Information explizit am Test angegeben wird. Des Weiteren entfällt die explizite Erstellung einer leeren initialen Testdatei.

Bei der Kombination von initialen Testdaten und ClearTables-Annotationen gilt folgendes Verhalten:

  1. Es ist keine ClearTables-Annotation vorhanden:

    • Sind initiale Testdaten für die Methode definiert, werden diese eingespielt.

    • Sind initiale Testdaten für die Klasse definiert, werden diese eingespielt.

    • Sind keine initialen Testdaten definiert, wird der Datenbankinhalt nicht verändert.

  2. Es ist eine ClearTables-Annotation an der Methode annotiert:

    • Sind initiale Testdaten für die Methode definiert, wird die checkerberry Fehlermeldung CB-DB-1043 erzeugt. Da nicht klar ist, ob die Methode initiale Testdaten einspielen oder die Datenbank leeren soll, kann dieser Konflikt nicht automatisch aufgelöst werden.

    • Sind initiale Testdaten für die Klasse definiert, wird die Datenbank dennoch geleert, da das für die Methode definierte Verhalten das für die Klasse definierte Verhalten überschreibt.

    • Sind keine initialen Testdaten definiert, wird der Datenbankinhalt geleert.

  3. Es ist eine ClearTables-Annotation an der Klasse annotiert:

    • Sind initiale Testdaten für die Methode definiert, werden diese eingespielt, da das für die Methode definierte Verhalten das für die Klasse definierte Verhalten überschreibt.

    • Sind initiale Testdaten für die Klasse definiert, wird Fehlermeldung CB-DB-1042 erzeugt. Da nicht klar ist, ob die Klasse initiale Testdaten einspielen oder die Datenbank leeren soll, kann dieser Konflikt nicht automatisch aufgelöst werden.

    • Sind keine initialen Testdaten definiert, wird der Datenbankinhalt geleert.

Die folgenden Code-Beispiele demonstrieren die Verwendung der ClearTables-Annotation.

Beispiel 2.35. ClearTables Annotation an Methode

public class ClearTablesAnnotatedMethodTest {

  @Test
  @ClearTables
  public void testAnnotated() {
    // Sind für diese Methode Initialdaten definiert,
    // schlägt der Test bereits im SetUp fehl.
    // Wenn nicht, wird der Datenbankinhalt geleert.
  }
}


Beispiel 2.36. ClearTables-Annotation an Klasse

@ClearTables
public class ClearTablesAnnotatedClassTest {

  @Test
  public void testAnnotated() {
    // Sind für diese Methode Initialdaten definiert,
    // werden diese eingespielt.
    // Wenn nicht und für die Klasse sind Initialdaten definiert,
    // dann schlägt der Test bereits im SetUp fehl.
    // Sind weder auf Klassen- noch auf Methodenebene Initialdaten
    // definiert, wird der Datenbankinhalt geleert.
  }
}


Zur Performance-Optimierung können Tabellen von checkerberry db gecacht werden (siehe Abschnitt 2.4.14, „Performance-Optimierung durch Caching von Tabellen“). Per Default wird die ClearTables-Annotation so interpretiert, dass die Inhalte aller Tabellen gelöscht werden. Dies betrifft insbesondere auch gecachte Tabellen. Möchte man den Cache durch die ClearTables-Annotation nicht löschen, kann die Annotation mit dem Attribut @ClearTables(TableTypes.NON_CACHEABLE) verwendet werden.