Inhaltsverzeichnis
Unit Tests
Definitionen
Unit tests
Bei einem unit test (auf deutsch: „Modultest“ oder „Komponententest“) werden einzelne, abgrenzbare Teile (i.d.R. einzelne Methoden) eines Programms überprüft. Ziel des unit tests ist es, die Lauffähigkeit und die Korrektheit dieser Teile zu überprüfen. Unit tests werden meist von den Entwickler/-innen der Software durchgeführt.
Automatisierte unit tests
Oft werden unit tests automatisiert durchgeführt, z.B. mit Hilfe von Test-Frameworks wie JUnit. Automatisierte tests haben den Vorteil, dass sie schnell und kostengünstig immer wieder durchgeführt werden können, wenn Änderungen am Programm vorgenommen wurden.
Test driven development
Beim test driven development schreibt man ausgehend von einer Anforderung einen unit tests der Überprüft, ob das Programm dieser Anforderung genügt. Dann erst wird das Programm so erweitert/verändert, dass der Test erfolgreich durchläuft.
JUnit
JUnit ist das am weitesten verbreitete Test-Framework für Java. Meist wird es zusammen mit einem test runner in der Entwicklungsumgebung verwendet, der das aktuelle Projekt automatisiert nach JUnit-Tests absucht, die gefundenen Tests übersichtlich anzeigt und das Starten der Tests ermöglicht. Nachdem die Tests ausgeführt wurden, stellt der test runner die Ergebnisse übersichtlich dar.
Schreiben von JUnit-Tests
JUnit-Tests sind Testmethoden innerhalb von Test-Klassen. Diese müssen folgenden Vorgaben genügen:
- Die Testklasse muss einen parameterlosen Konstruktor besitzen und kann mit
@Test
annotiert sein. - Jede Testmethode innerhalb der Testklasse muss
- parameterlos sein,
- void zurückliefern und
- mit
@Test
annotiert sein.
Innerhalt der Test-Methoden kann man durch sogenannte assertions dem test runner mitteilen, ob ein Test erfolgreich war („test passed“) oder gescheitert ist („test failed“). Assertions sind ganz einfach Aufrufe folgender globaler Methoden:
assertEquals(expected, actual, String errorMessage) // prints errorMessage if expected != actual assertTrue(boolean condition, String errorMessage) // prints errorMessage if condition != false assertFalse(boolean condition, String errorMessage) // prints errorMessage if condition != true fail(String errorMessage) // prints errorMessage (place this at a location that must'nt be reached) assertCodeReached(String errorMessage) // prints errorMessage if NOT CALLED (place this at a location that must be reached before program end)
Die letzte dieser Methoden (assertCodeReached
) ist nicht Bestandteil von JUnit, sondern eine Spezialität der Online-IDE.
Beispiel
Das folgende Programm besteht aus einer Klasse MathHelper
, deren Methoden getestet werden sollen, und einer Klasse MathHelperTest
mit automatisierten JUnit-Tests dazu. Öffnen Sie im unteren Teil des Programmfensters den Reiter „Testrunner“ und klicken Sie auf die grünen Dreickspfeile vor den Tests, um sie auszuführen.
Tipp:
Falls ein Testlauf gescheitert ist und Sie den Fehler suchen, setzen Sie einfach einen Breakpoint im Programm und lassen Sie den Test erneut laufen. Der Testlauf hält dann bei Ihrem Breakpoint an, so dass Sie bequem den Debugger zur Fehlersuche nutzen können.