Assert qu’une exception est levée dans JUnit 4 et 5

Affirmer qu'une exception est levée dans JUnit 4 et 5

1. introduction

Dans ce rapide tutoriel, nous allons voir comment tester si une exception a été levée, à l'aide de la bibliothèque JUnit.

Bien entendu, nous veillerons à couvrir à la fois les versions JUnit 4 et JUnit 5.

Lectures complémentaires:

L'ordre des tests dans JUnit

Apprenez à exécuter des tests JUnit dans un ordre personnalisé.

Read more

Assertions dans JUnit 4 et JUnit 5

Un regard sur les affirmations dans les JUnit 4 et 5.

Read more

2. JUnit 5

L'API d'assertions JUnit 5 Jupiter introduit la méthodeassertThrows pour affirmer des exceptions.

Cela prend le type de l'exception attendue et une interface fonctionnelleExecutable où nous pouvons passer le code sous test via une expression lambda:

@Test
public void whenExceptionThrown_thenAssertionSucceeds() {
    String test = null;
    assertThrows(NullPointerException.class, () -> {
        test.length();
    });
}

Il est important de noter ici quethis assertion is satisfied when the enclosed code throws an exception of type NullPointerException or any of its derived types.

Cela signifie que si nous passonsException comme type d'exception attendu, toute exception levée fera réussir l'assertion puisqueException est le supertype pour toutes les exceptions.

Si nous modifions le test ci-dessus pour attendre unRuntimeException,, cela passera également:

@Test
public void whenDerivedExceptionThrown_thenAssertionSucceds() {
    String test = null;
    assertThrows(RuntimeException.class, () -> {
        test.length();
    });
}

La méthodeassertThrows() permet un contrôle plus fin pour la logique d'assertion d'exception car nous pouvons l'utiliser autour de parties spécifiques du code.

3. JUnit 4

Lorsque vous utilisez JUnit 4, nous pouvons simplementuse the expected attribute of the @Test annotation pour déclarer que nous nous attendons à ce qu'une exception soit levée n'importe où dans la méthode de test annotée.

Par conséquent, le test échouera si l'exception spécifiée n'est pas levée lors de l'exécution du test et réussira si elle est lancée:

@Test(expected = NullPointerException.class)
public void whenExceptionThrown_thenExpectationSatisfied() {
    String test = null;
    test.length();
}

Dans cet exemple, nous avons déclaré que nous nous attendions à ce que notre code de test aboutisse à unNullPointerException.

Cela suffit si nous voulons seulement affirmer qu’une exception est levée.

Lorsque nous devons vérifier certaines autres propriétés de l'exception, nous pouvons utiliser la règleExpectedException.

Voyons un exemple de vérification de la propriétémessage d’une exception:

@Rule
public ExpectedException exceptionRule = ExpectedException.none();

@Test
public void whenExceptionThrown_thenRuleIsApplied() {
    exceptionRule.expect(NumberFormatException.class);
    exceptionRule.expectMessage("For input string");
    Integer.parseInt("1a");
}

Dans l'exemple ci-dessus, nous déclarons d'abord la règleExpectedException. Ensuite, dans notre test, nous affirmons que le code qui tente d'analyser une valeurInteger se traduira par unNumberFormatException avec le message «Pour la chaîne d'entrée».

4. Conclusion

Dans cet article, nous nous sommes concentrés sur les exceptions d'affirmation avec JUnit 4 et JUnit 5.

Le code source complet des exemples est disponibleover on GitHub.