Einführung
Übersicht: Einführung
Motivation
Das Testen von Programmcode wird von Entwicklern meistens vernachlässigt. Gründe dafür sind sehr oft ein straffer Zeitplan, sowie mangelnde Motivation neben dem eigentlichen Programmcode auch Testroutinen zu schreiben. Jedoch ist das Testen von Programmcode mindestens genauso wichtig, wie das Programmieren an sich.
Der Mangel an frühen und gründlichen Tests am Anfang, führt oft zu Unrentabilität des ganzen Projektes: die Komplexität der Fehlersuche steigt mit der Anzahl von Programmzeilen exponential an. Jedoch wird die Fehlersuche oft schon in kleineren Projekten durch mangelnde Möglichkeiten beschränkt.
Es gibt zwei herkömmliche Möglichkeiten um Programmcode zu testen:
- Das Debugen von Code mittels eines Debuggers.
- Die Ausgabe von Debuginformationen auf die Standardausgabe.
Beide Methoden sind deshalb nicht optimal, da sie vom Entwickler immer aktives Mitdenken während der Tests voraussetzen. Weiterhin ist die Zuhilfenahme eines Debugers nicht immer möglich, bzw. oftmals schwierig (z.B. bei mehreren Threads).
Die Standardausgabe kann schon bei kurzen For- oder While-Schleifen oft mit Output überflutet werden. Die eigentlich wichtigen Informationen gehen dabei oftmals in einer Flut von Ausgaben unter.
Abhilfe soll hier JUnit schaffen.
Was ist JUnit?
JUnit ist ein Test-Framework, welches es einem Entwickler erlaubt, geschriebenen Programmcode schnell und effizient zu testen. JUnit stellt dabei Klassen zur Verfügung, welche den automatischen Test, schon während der Entwicklung, ermöglichen. Eine Benutzerinteraktion ist während des Testens nicht erforderlich, ebenso ist Threadsicherheit implementiert.
Dabei geht das Konzept von JUnit davon aus, dass zu jeder geschriebenen Klasse, eine oder mehrere Testroutinen - die sogenannten Testcases (TestCase) - verfasst werden. Wie JUnit das eigentliche Testen des Codes übernimmt, werden wir uns weiter unten ansehen. Im Allgemeinen soll folgender Grundsatz gelten:
Erst testen (!), dann Programmcode verfassen. Daraufhin wieder testen und wiederum Programmcode verfassen.
Die Arbeitsweise von JUnit werden wir folgend bis zu einem gewissen Punkt anhand der Struktur des Frameworks, später an einem Beispiel verdeutlichen. Nach diesem Beispiel kehren wir wieder zu den durch das Framework bereitgestellten Technologien zurück um etwas weiterführende Mechanismen kennenzulernen.
Die Struktur von JUnit
Folgend soll die Struktur des Frameworks betrachtet werden. Nach Installation des Paketes, welche durch das Kopieren der Bibliothek in ein durch die CLASSPATH-Variable abgedecktes Verzeichnis durchgeführt wird, ist JUnit einsatzbereit. Dabei sind alle zum Testen notwendigen Klassen im Paket junit.framework bereits enthalten.
Die hierbei wichtigsten Klassen sind:
- TestCase und TestSuite: dienen zum Verfassen von eigenen Testfällen.
- Assert: Stellen Behauptungen auf.
- Test: Ein Interface welches das TestCase und die TestSuite vereint.
- TestRunner: dient zum eigentlichen Ausführen der Tests.
Bei der Arbeit mit JUnit erstellen wir im ersten Schritt einen Testfall durch die Ableitung der Klasse TestCase und Überschreiben der Methode runTest(). In dieser Testroutine stellen wir dabei Behauptungen auf, die zum erfolgreichen Bestehen der Tests, positiv ausgewertet werden müssen.
Verläuft ein Test negativ, werden von den Assert-Methoden Exceptions geworfen, welche der Testumgebung einen Feedback über den Testverlauf geben. Dazu jedoch unten mehr: schauen wir uns vorerst die vereinfachte Implementierung der Klasse TestCase an.
Code generated with AusarbeitungGenerator Version 1.1, weblink