Unit-Tests bei Datenbankänderungen

sutcha

Bekanntes Mitglied
Hallo,


ich stehe vor folgendem Problem:

diverse Java-Anwendungen greifen auf eine DB zu. Diese Anwendungen teste ich mit JUnit auf Funktion, dabei vergleiche ich aber auch die Ergebnisse. Wenn ich also etwas ändere, was das Ergebnis nicht beeinflussen soll, dann sollte nach der Änderung der Test weiterhin durchlaufen. Für das Testen verwende ich eine andere DB als für das produktive System.
Jetzt lösche ich aber Felder in der Datenbank oder benenne sie um. Teilweise manipuliere ich die Test-DB auch. Welche Test-Frameworks könnt ihr mir empfehlen, die einen Snapshot machen, den man aber manuell anpassen kann (Feld-Änderungen)? Es handelt sich dabei um ein DWH.


Viele Grüße
 

sutcha

Bekanntes Mitglied
Du hast aber keine persönlichen Erfahrungen damit gemacht oder?

ich schau mir gerade benerator, DBUnit und DDTUnit an.
 
M

maki

Gast
Doch, mit DBUnit hab ich Erfahrung.

Hat ein paar Eingenheiten, zB. die erste Row in der XML Datei muss alle (!) Felder enthalten, sonst wundert man sich ;)

Wenn du Fragen hast schiess los.
 

sutcha

Bekanntes Mitglied
Zur Eigenheit mit den Feldern in der ersten Reihe der XML-Datei: bedeutet das, dass ich leere Felder manuell ergänzen muss?

Ich bau mir also einen Extractor, der quasi einen Snapshot erstellt. Dieser wird dann in XML-Dateien geschrieben. Wie wird dann auf die unterschiedlichen XML-Dateien zugegriffen? Ich würde pro Tabelle eine XML-Datei erstellen.

Im Testcase verwende ich dann eine DB-Connection, die auf die XML-Dateien zugreift. Klingt ja eigentlich nicht nach so viel Aufwand ;)

Mein Wunsch-Framework wäre folgendes: ich starte meine JUnit-Tests und ein Proxy, der vor dem DB-Treiber hängt, schreibt zu den Abfragen entsprechend die Ergebnisse in eine externe Datei. Wenn ich dann den Test durchführen will, greift der Proxy nichtmehr auf die DB sondern auf die erstellten Dateien zu. Auf diese Weise wird für identische Daten garantiert, nur mit der Änderung von Feldern wird es wieder schwierig.
 
M

maki

Gast
Zur Eigenheit mit den Feldern in der ersten Reihe der XML-Datei: bedeutet das, dass ich leere Felder manuell ergänzen muss?
u.U. ja.

Ich bau mir also einen Extractor, der quasi einen Snapshot erstellt. Dieser wird dann in XML-Dateien geschrieben. Wie wird dann auf die unterschiedlichen XML-Dateien zugegriffen? Ich würde pro Tabelle eine XML-Datei erstellen.
Das kann DBUnit schon.
Kannst dir ja mal die Tutorials auf der DBUnit Seite ansehen.

Im Testcase verwende ich dann eine DB-Connection, die auf die XML-Dateien zugreift. Klingt ja eigentlich nicht nach so viel Aufwand
DBUnit kann dir die XML Dateien in die DB einspielen, sogar unterschiedlich, refresh-update, delete-insert, usw..

Mein Wunsch-Framework wäre folgendes: ich starte meine JUnit-Tests und ein Proxy, der vor dem DB-Treiber hängt, schreibt zu den Abfragen entsprechend die Ergebnisse in eine externe Datei. Wenn ich dann den Test durchführen will, greift der Proxy nichtmehr auf die DB sondern auf die erstellten Dateien zu. Auf diese Weise wird für identische Daten garantiert, nur mit der Änderung von Feldern wird es wieder schwierig.
Würde dir empfehlen dir mal DBUnit genauer anzusehen, bietet die Funktionalität ohne Proxy ;)

Nachtrag:
Lesenswert: Back Door Manipulation at XUnitPatterns.com
 
Zuletzt bearbeitet von einem Moderator:

sutcha

Bekanntes Mitglied
Super, vielen Dank für deine Hilfe ;) das Tutorial, eigentlich nur ein HowTo, habe ich mir schon angeschaut. Werde mich noch ein bisschen einlesen und dann anfangen ;)
 

sutcha

Bekanntes Mitglied
Eine Frage habe ich noch: das erstellen des Datasets in einer XML geht nur, indem man bestimmte Tabellen vorgibt, die er sich dann läd? Eine schönere Lösung gibt es nicht? Also quasi nur die Daten zu holen, die ich auch wirklich brauche?
 

sutcha

Bekanntes Mitglied
Ja, das benutze ich momentan. Ist nur ein bisschen umständlich, weil ich nicht genau weiß, was ich alles brauche. Alles zu laden wäre zu viel und mit Einschränkungen wird es sehr schwierig. Es sind ca. 30-50 Tabellen ;)
 

sutcha

Bekanntes Mitglied
Naja, das war ja meine Überlegung mit dem Proxy :) ich lass den Test einmal auf die DB laufen und hab dann die Daten, die ich brauche. Der Proxy weiß ja, welche Daten ich aus der DB geladen habe und erstellt mir dann ein Dataset.
 

Hannes23

Bekanntes Mitglied
Jetzt muss ich mal ganz blöd fragen: Kann ich mit DBUnit auch vor Ausführung meiner JUnit-Testfälle die komplette (in meinem Fall MySQL-)Datenbank exportieren und nach Durchführung der Tests wieder restoren? (oder ist vielleicht genau das DIE Aufgabe von DBUnit?)
 
M

maki

Gast
Ja, kannst du.
Aber das geht auch ohne DBUnit (zB mit reinem JDBC + SQL Skripten), DBUnit kann mehr ;)
 

Ähnliche Java Themen


Oben