434 Stimmen

Wie testet man, dass keine Ausnahme geworfen wird?

Ich weiß, dass eine Möglichkeit, dies zu tun, wäre:

@Test
public void foo() {
   try {
      // Führe den Code aus, von dem du keine Ausnahmen erwartest.
   } catch(Exception e) {
      fail("Sollte keine Ausnahme geworfen haben");
   }
}

Gibt es einen saubereren Weg, dies zu tun? (Vielleicht mit Junit's @Rule?)

31voto

Ben Tennyson Punkte 639

Wenn Sie das Pech haben, alle Fehler in Ihrem Code zu erfassen. Sie können dumm machen

class DumpTest {
    Exception ex;
    @Test
    public void testWhatEver() {
        try {
            thisShouldThrowError();
        } catch (Exception e) {
            ex = e;
        }
        assertEquals(null,ex);
    }
}

26voto

Dinesh Arora Punkte 1897

Obwohl dieser Beitrag jetzt 6 Jahre alt ist, hat sich viel in der Junit-Welt verändert. Mit Junit5 können Sie jetzt verwenden

org.junit.jupiter.api.Assertions.assertDoesNotThrow()

Zum Beispiel:

public void thisMethodDoesNotThrowException(){
   System.out.println("Hallo");
}

@Test
public void test_thisMethodDoesNotThrowException(){
  org.junit.jupiter.api.Assertions.assertDoesNotThrow(
      ()-> thisMethodDoesNotThrowException()
    );
}

Hoffentlich wird es Menschen helfen, die die neuere Version von Junit5 verwenden

8voto

razalghul Punkte 115

JUnit5 fügt die assertAll() Methode für diesen genauen Zweck hinzu.

assertAll( () -> foo() )

Quelle: JUnit 5 API

7voto

pirho Punkte 10619

Um ein Szenario mit einer Void-Methode wie

void testMeWell() throws SomeException {..}

zu überprüfen, ob keine Ausnahme geworfen wird:

Junit5

assertDoesNotThrow(() -> {
    testMeWell();
});

4voto

Canatto Filipe Punkte 489

AssertJ kann dieses Szenario verarbeiten:

assertThatNoException().isThrownBy(() -> System.out.println("OK"));

Überprüfen Sie die Dokumentation für weitere Informationen https://assertj.github.io/doc/#assertj-core-exception-assertions-no-exception

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X