JUnit und das Zulassen von RuntimeExceptions

Crian

Top Contributor
Ich verwendet JUnit (4) um meinen Quellcode zu testen. Wenn ein Code eine Exception wirft, die von java.lang.Exception erbt, kann ich das gut testen mit

Java:
    @Test(expected = MyException.class)
    public void testCase1() {
        MyClass m = new MyClass();
        m.doSomething(); // wirft die Exception;
    }

Und alles ist fein. Genauso kann ich es auch mit einer java.lang.RuntimeException machen:

Java:
    @Test(expected = MyRuntimeException.class)
    public void testCase2() {
        MyClass m = new MyClass();
        m.doSomethingOther(); // wirft die RuntimeException;
    }

Nun möchte ich aber nach dem Test der Exception auch noch die Ausgaben, die davor in
Code:
doSomethingOther()
stattfanden testen. Dafür würde ich ihm gern sagen, dass das werfen der Exception in Ordnung ist, er aber nicht abbrechen soll dabei. Versuche ich es einfach, indem ich die Klammer mit
Code:
expected=
weglasse, bekomme ich im Fehlertrace den Hinweis auf die geworfene Exception in meiner Methode und die Verarbeitung des Testfalles bricht dann ab, alle Zeilen unter dem Aufruf von
Code:
doSomethingOther()
werden nicht mehr ausgeführt.

Gibt es da einen Weg, oder kann man so etwas nicht testen?
 
Zuletzt bearbeitet:
[c]expected[/c] hat ein paar Einschränkungen und lässt sich daurch leider nur in den einfachsten Fällen einsetzen (danke @bygones).

Du kannst es auch "klassisch" machen, so wie vor JUnit 4 und expected:
Java:
@Test
public voidMyTest() {
    try {
        MyClass m = new MyClass();
        m.doSomethingOther();
        fail("Expected exception not thrown");
    } catch (ErwarteteException) {
        assertTrue(true);
    }

    assert...

}
Ob das allerdings empfehlenswert ist, ist eine andere Frage, die so ohne weiteres wolh nciht von hier aus beantwortet werden kann.
 

Zurück
Oben