Im Blog „Qualitätssteigerung mit automatisiertem Testen“ wurden die Vorteile vom automatisierten Testen bereits erläutert. Doch wie wird richtig getestet? Wie kann man Software überhaupt automatisiert testen?
Angenommen ich habe eine Blog-Software und möchte einen Test schreiben, welcher einen Blog-Eintrag veröffentlicht. Hierbei interessiert mich nur gerade das Veröffentlichen des Bloges. Alle restlichen Funktionen und Abläufe z.B. die Registrierung eines Blog-Benutzers interessieren mich jedoch nicht. Der Test wird also wie folgt beschrieben:
- Name: Blog-Eintrag veröffentlichen
- Vorbedingungen: Blog-Benutzer existiert und kann Einträge veröffentlichen
- Testresultat: Der Blog-Eintrag wurde korrekt veröffentlicht
- Testfall: Der Blog-Benutzer schreibt einen Blog und veröffentlicht diesen auf der Homepage.
Bei der Durchführung dieses Tests habe ich nun das Problem, dass ich die Vorbedingungen sicherstellen muss. Sprich ich muss zuerst einen Blog-Benutzer anlegen, welcher Einträge veröffentlichen kann. Ein kleiner und einfacher Test kann also auf Grund der Vorbedingungen schnell sehr aufwendig werden. Vor allem wenn z.B. Ausnahmefälle (z.B. mit einem gesperrten Blog-Benutzer) getestet werden müssen. Ebenfalls habe ich das Problem, dass die Überprüfung des Testresultates nicht immer einfach ist. Für automatisierte Tests im Java-Umfeld gibt es hierfür ein Zauberwort: „Unitils“.
Unitils ist ein Test-Framework, welches auf JUnit basiert und verschiedene Module zum Testen von Java-Anwendungen beinhaltet. Eines der Module heisst DBUnit. Mit Hilfe dieses Modules kann unser kleines Problem sehr einfach und elegant gelöst werden. Mit DBUnit kann ein definierter Datenzustand in der Datenbank inialisiert werden. Ebenfalls können nach einem Test die Datensätze mit Hilfe von DBUnit überprüft werden. Der Ablauf ist sehr einfach:
- Die Datenbank wird mit einem definierten Zustand initialisiert
- Der JUnit-Test wird ausgeführt
- Die Modifikationen in der Datenbank werden überprüft
Dadurch können auch Spezialfälle sehr schnell und einfach getestet werden.
Datenbank initialisieren
In Schritt 1 wird mit Hilfe einer XML-Datei der Zustand der Datenbank definiert. Die Datenbank wird vor der Ausführung des Tests automatisch durch Unitils initialisiert.
Beispiel XML:
<dataset> <TBL_USER ID=”1” LOGINNAME=”testuser” ACTIVE=”1” /> </dataset>
Hier wird also ein Benutzer „testuser“ in der Datenbank angelegt, welcher aktiviert ist und somit Blog-Einträge erfassen kann.
Datenbank überprüfen
Auch die Testresultate können mit Hilfe einer XML-Datei definiert werden. Unitils überprüft nach der Testdurchführung die Datenbank auf Grund der in der XML-Datei definierten Datensätze.
Beispiel XML:
<dataset> <TBL_BLOG ID=”1” USER_ID=”1” BLOG=”Dies ist ein Blog...” /> </dataset>
Hier wird also überprüft, ob in der Datenbank der Blog-Eintrag korrekt erstellt und mit dem Benutzer verknüpft wurde.
Datensets (XML-Dateien)
Ein Test kann beliebig viele Datensets laden. Ebenfalls können die Datensets (XML-Dateien) von beliebig vielen Tests verwendet werden. Mit Hilfe von Defaultdatensets können so sehr schnell die Vorbedingungen sämtlicher Tests abgedeckt werden. Z.B. könnten wie folgt Defaultdatensets definiert werden:
- Aktiver Benutzer
- Gesperrter Benutzer
- Blog Eintrag für Benutzer
- etc.
Kennen Sie das Problem mit den Vorbedingungen für einen Test? Welche Lösung haben Sie dafür?