Ich versuche mit JUnit in die Tests zu kommen und ich habe Mühe zu verstehen, was ich falsch mache. Ich habe etwas ziemlich einfaches gemacht:JUnit: Test Annotation und erwartete Ausnahmen
Eine Klasse, die in der Lage sein sollte, etwas zu erstellen. Bisher teste ich nur, ob das Objekt null ist oder nicht.
Die Tester-Klasse erstellt ein neues TestedClass-Objekt und versucht, etwas mit null zu erstellen. Es erwartet eine IllegalArgumentException.
import org.junit.Test;
public class Tester {
@Test(expected = IllegalArgumentException.class)
public void createWithNullShouldThrowException() {
TestedClass t = new TestedClass();
t.create(null);
}
}
Nur die Hauptklasse.
public class Main {
public static void main(String[] args) {
Tester test = new Tester();
test.createWithNullShouldThrowException();
System.out.println("passed all tests!");
}
}
So wie ich es verstehe, sollte es richtig beenden, wenn ein Illegal während des gesamten Prüfvorgangs geworfen gibt. Was der Fall ist, wie mein Programm endet mit:
Exception in thread "main" java.lang.IllegalArgumentException
at TestedClass.create(TestedClass.java:4)
at Tester.createWithNullShouldThrowException(Tester.java:6)
at Main.main(Main.java:7)
Was nicht geschehen sollte, da es durch die createWithNullShouldThrowException() -Methode in der Klasse Tester erwischt werden sollte, oder bin ich das nicht richtig zu verstehen? Ich weiß, dass ich das wahrscheinlich mit einem try catch block machen könnte, aber ich möchte nur wissen, was in diesem Fall falsch ist. Wenn es irgendeine Hilfe ist, verwende ich IntelliJ IDEA 16.1. Jede Hilfe wäre willkommen.
Sie müssen keine Instanz von Tester in der Hauptmethode erstellen. In Eclipse können Sie die Testklasse ausführen, indem Sie mit der rechten Maustaste auf die Datei klicken und dann Ausführen als-> JUnit-Test ausführen. Ich bin mir ziemlich sicher, dass Intellij etwas Ähnliches ist. –
Yup. Führe es nicht durch 'main()', führe es durch jUnit. Es funktioniert perfekt, wenn es korrekt ausgeführt wird. –
Nebenbei: Verwenden Sie nicht '@ Test (erwartet = IllegalArgumentException.class)'. Verwenden Sie stattdessen ExpectedException. Siehe http://stackoverflow.com/questions/156503/how-do-you-assert-that-a-certain-exception-is-thrown-in-junit-4-tests?rq=1, aber ignoriere die akzeptierte Antwort . Dies gibt Ihnen eine bessere Kontrolle über das Erkennen der Ausnahme. –