JUnit ist ein Framework zum Testen von Java-Programmen, wobei diese dabei in einzelne Units (zu Deutsch Einheiten) aufgeteilt werden.
Was ist JUnit 5?
Um Tests in Java durchzuführen, gibt es mehrere Test-Frameworks. Das bekannteste Framework ist dabei JUnit.
Dort wird das Programm in einzelnen Units (zu Deutsch Einheiten) getestet. Diese Einheiten können Klassen oder Methoden sein.
JUnit besteht aus der JUnit-Plattform, dem JUnit Jupiter und dem JUnit Vintage.
Die JUnit-Plattform bildet die Grundlage für das Starten des Test-Frameworks in der Java Virtual Machine.
Das Jupiter-Subprojekt enthält ein Test-Programm, um Jupiter-basierte Tests auf der JUnit-Plattform laufen zu lassen.
JUnit Vintage enthält ein Test-Programm für die Durchführung von JUnit-3- und JUnit-4-basierten Tests.
Bevor du JUnit 5 verwenden kannst, musst du es auf der JUnit-Webseite kostenlos herunterladen.
Dann kannst du auch schon mit dem Testen in deiner Lieblings-Programmierumgebung (wie zum Beispiel IntelliJ) starten.
Test-Klassen und -Methoden
Deine Tests schreibst du in eigenen Test-Klassen bzw. in deren Test-Methoden.
Dabei musst du auf ein paar Regeln achten:
Die Test-Klassen dürfen nicht
abstract
sein und dürfen nur einen Konstruktor enthalten.Die Test-Klassen und -Methoden dürfen nicht
private
sein.
Annotationen
Um innerhalb deiner Testklasse deutlich zu machen, dass es sich um Test-Methoden handelt, verwendest du die Annotation @Test
. Diese schreibst du über deine jeweiligen Test-Methoden.
Assertions
Innerhalb deiner Test-Methoden kannst du auf Assertions (zu Deutsch Behauptungen) zurückgreifen. Damit können schon viele Bereiche deines Codes abgedeckt werden, da dort beispielsweise der tatsächliche Output von Methoden mit dem erwarteten Wert verglichen wird.
Es gibt ein paar nützliche Assertions, die du dir merken solltest:
assertEquals
assertTrue
assertFalse
assertNull
assertNotNull
assertSame
assertNotSame
assertEquals
Die assertEquals
-Methode wird sehr häufig verwendet, da hier der erwartete Wert mit dem tatsächlichen Output einer zu testenden Methode verglichen wird.
Schau dir zum besseren Verständnis folgendes Code-Beispiel an:
Besuche die App, um alle Inhalte zu sehen!
Bei der Methode exampleMethod
der Klasse ExampleClass
soll überprüft werden, ob der Output dieser Methode mit dem Wert value
übereinstimmt.
Wenn die Werte übereinstimmen, wird die Assertion zu true
ausgewertet und der Test ist bestanden. Bei jedem anderen Ergebnis wird die Assertion jedoch zu false
ausgewertet. Der Test gilt dann als fehlgeschlagen.
assertTrue
Bei assertTrue
, wird überprüft, ob die übergebene Bedingung zu true
ausgewertet wird.
Schau dir auch hier wieder zur Veranschaulichung folgenden Code an:
Besuche die App, um alle Inhalte zu sehen!
Die assertTrue
-Assertion wird also nur dann zu true
ausgewertet, wenn der Output des ersten Methodenaufrufs in diesem Fall kleiner ist als der zweite. Anstelle dieser Bedingung können natürlich auch viele andere verwendet werden. Die Hauptsache ist, dass sie als Ergebnis true
liefern sollte und damit bewiesen werden kann, dass die zu testende Methode unter diesen Bedingung korrekt ausgeführt wird.
assertFalse
Wie du dir schon denken kannst, prüft assertFalse
, ob die in der Klammer übergebene Bedingung zu false
ausgewertet wird. Ist dies der Fall, war der Test erfolgreich.
Schau dir dazu wieder folgendes Code-Beispiel an:
Besuche die App, um alle Inhalte zu sehen!
Wenn der erste übergebene Wert nicht größer als der zweite ist, wird die Assertion zu false
ausgewertet und der Test wäre damit bestanden.
Hier musst du also einmal genau umgekehrt zu assertTrue
denken!
assertNull
Wie der Name schon verrät, soll hier die Assertion überprüfen, ob das Objekt Null ist.
Zur Erinnerung: Ein Objekt ist Null, wenn es nicht explizit initialisiert, also mit einem Wert belegt wurde.
In dem folgenden Code wird bei einem Objekt mithilfe dieser Assertion überprüft, ob es Null ist:
Besuche die App, um alle Inhalte zu sehen!
Ist dies der Fall, wird die Assertion zu true
ausgewertet und der Test gilt als bestanden.
assertNotNull
Im Gegensatz dazu überprüft die Assertion assertNotNull
, ob das übergebene Objekt nicht Null ist:
Besuche die App, um alle Inhalte zu sehen!
assertSame
Manchmal kann es auch hilfreich sein, zu überprüfen, ob zwei Objektreferenzen auf dasselbe Objekt zeigen:
Besuche die App, um alle Inhalte zu sehen!
assertNotSame
Auch hier gilt wieder das Gegenteil zu assertSame
. Zeigen beide Objektreferenzen nicht auf dasselbe Objekt, wird die Assertion zu true
ausgewertet.
Besuche die App, um alle Inhalte zu sehen!
Tests in IntelliJ IDEA starten
Wenn du zu deiner Klasse eine Testklasse erstellen möchtest, musst du in IntelliJ auf den Namen der Klasse in deinem Code klicken.
Dann verwendest du bei MacOs die Tastenkombination option + Enter. Bei Windows lautet der Befehl Alt + Enter.
Anschließend ploppt ein Dropdown auf, indem du Create Test auswählst.
In dem sich nun öffnenden Fenster wählst du als Testing Library die aktuellste JUnit-Version aus. Momentan ist dies JUnit5.
Jetzt kannst du deine Testklasse noch umbenennen, wenn du das möchtest.
In dem Fenster kannst du mithilfe von Checkboxen auswählen, zu welchen Methoden du eine Test-Methode erstellen möchtest.
Anschließend musst du nur noch auf OK klicken und deine Testklasse ist aufgesetzt!
Beispiel-Testklasse
Lege dir eine Klasse Calculator
an. In dieser erstellst du jeweils eine Methode pro Rechenoperation, also addition
, subtraction
, multiplication
und division
.
Die Methoden haben dabei alle den Rückgabetyp double
und können auf public
gesetzt werden.
Diesen Methoden werden jeweils zwei Parameter übergeben: double param1
und double param2
.
Innerhalb der Methoden werden die jeweiligen Rechenoperationen an den Parametern ausgeführt und mittles des return
-Befehls zurückgegeben.
Deine Klasse sollte also wiefolgt aussehen:
Besuche die App, um alle Inhalte zu sehen!
Um nun eine Testklasse zu erzeugen, klickst du auf den Klassennamen und erstellst dir wie oben beschrieben eine Testklasse mit dem Namen CalculatorTest
. Wähle hierbei jedoch keine deiner Rechenoperations-Methoden aus.
Nachdem die Testklasse erstellt wurde, legst du dir eigene Testmethoden an. Dafür verwendest du immer die Annotation @Test
. Darunter folgt dann der Kopf deiner Test-Methode.
Du kannst nun die verschiedenen Assertions mithilfe deiner Methoden aus Calculator
ausprobieren.
Hier sind einige Beispiele:
Besuche die App, um alle Inhalte zu sehen!