Ich habe mich jetzt mit Exceptions befasst. Wie man eigene Exceptions erstellt und wie man try-catch Blöcke nutzt. Was genau hat es jetzt mit JUnit auf sich, wenn man try-catch Blöcke nutzt und eigene Exceptions baut?
Klingt echt komisch, aber mir fehlt es an Verständnis das ganze zusammenzubringen.
Um Code automatisiert zu testen. Du schreibst Tests mit Hilfe von JUnit und lässt diese dann ausführen.
JUnit ist sowohl eine Assertion-Library (formulieren von Erwartungen an zu testenden Code) als auch ein Testtreiber (finden von auszuführenden Tests und ausführen dieser Tests) als auch ein Reporting-Tool für Testerfolge/-fehlschläge. https://de.wikipedia.org/wiki/JUnit
Okay, das ersprart vmtl. jede Menge Arbeit, wenn man automatisch testet. So könnte ich bspw. dann automatisch testen, ob meine Methode immer korrekt ausgeführt wird, oder?
Java:
publicclassMatheSammlung{publicdoubleberechneWurzel(double x){double ergebnis;if(x <=0){thrownewIllegalArgumentException("Diese Eingabe ist nicht erlaubt");}else{
ergebnis =Math.sqrt(x);}return ergebnis;}}importstaticorg.junit.jupiter.api.Assertions.*;importorg.junit.jupiter.api.Test;classMatheSammlungTest{@Testvoidtest(){MatheSammlung x =newMatheSammlung();
x.berechneWurzel(4);
x.berechneWurzel(2);}}
Ja, wobei dein Test nichts testet. Ein möglicher Test wäre stattdessen:
Java:
importstaticorg.junit.jupiter.api.Assertions.*;importorg.junit.jupiter.api.Test;classMatheSammlungTest{privateMatheSammlung x =newMatheSammlung();@TestvoidberechneWurzelMitPositivenArgumenten(){assertEquals(2.0, x.berechneWurzel(4),0.0);assertEquals(1.4142135623730951, x.berechneWurzel(2),0.0);}@TestvoidberechneWurzelMitNegativemArgument(){assertThrows(IllegalArgumentException.class,()-> x.berechneWurzel(-1),"Diese Eingabe ist nicht erlaubt");}}
By the way: Die Wurzel von 0 ist definiert, somit sollte deine Implementierung eher auf < 0 denn auf <= 0 testen. Das würde auch durch gut geschrieben Tests aufgedeckt werden.
Prinzipiell richtig, aber du testest da nicht richtig. Ersetze den Inhalt der Methode durch ein return 0; und dein Test läuft weiter durch...
Zu einem Tests gehören auch asserts die sicher stellen, dass das richtige Ergebnis raus kommt.
Und es gibt eine Funktionalität, die auch noch nicht getestet wurde: bei negativer Eingabe soll eine Exception geworfen werden ...