Der Einsatz von Datenbanken gehört zum Alltag vieler Software-Entwickler. Möchte man Code testen, der auf die Datenbank zugreift, tut man sich allerdings häufig schwer. Wie lässt sich ein solcher Test überhaupt automatisieren? Wie schafft man es, dass der Test trotz echtem Datenbankzugriff schnell läuft und stabil bleibt?
Neben Tests der Datenbankschicht stellen automatisierte Integrationstests/Systemtests eine weitere Herausforderung dar. Vor Ausführung eines solchen Tests muss die Datenbank in einen bestimmten, bekannten Zustand versetzt werden. Ansonsten sind derartige Tests sehr fragil und erfordern einen hohen Wartungsaufwand, da sie häufig aufgrund einer veränderten Datenkonstellation fehlschlagen.
DbUnit bietet hierfür gute Lösungsansätze, es erlaubt etwa den Im- und Export von Datensätzen sowie ganzer Tabellen aus bzw. in XML-Dateien. Dieser datei-basierte Ansatz hat allerdings einige Nachteile. Zum einen ist in einem Test nicht direkt ersichtlich, welche Daten in die Datenbank geladen werden. Zum anderen müssen alle XML-Dateien von Hand angepasst werden, wenn sich das Datenbankschema ändert.
Dieser Vortrag stellt eine Alternative zum datei-basierten Ansatz vor, der dennoch die Stärken von DbUnit nutzt. Statt XML-Dateien zu editieren, erfolgt das Zusammenbauen eines DataSets direkt im Code unter Verwendung des Builder-Patterns. Weiter wird erläutert, wie etwa Umbenennungen oder die Einführung neuer Spalten über Refactorings damit ohne viel Aufwand zu erledigen sind.