Maison >Java >javaDidacticiel >Comment affirmer efficacement les exceptions dans les tests JUnit ?

Comment affirmer efficacement les exceptions dans les tests JUnit ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-20 07:51:12920parcourir

How to Effectively Assert Exceptions in JUnit Tests?

Exécuter des assertions d'exception dans les tests JUnit

Affirmer qu'une exception spécifique est levée lors de l'exécution du code est un scénario de test courant dans JUnit. Pour ce faire efficacement, JUnit propose plusieurs méthodes qui améliorent la lisibilité et simplifient le processus de test.

Assertions JUnit 5 et 4.13

Dans JUnit 5 et 4.13, le @Test l'annotation avec l'attribut attendu peut être utilisée directement :

@Test
public void testIndexOutOfBoundsException() {
    ArrayList<Object> emptyList = new ArrayList<>();
    assertThrows(IndexOutOfBoundsException.class, () -> emptyList.get(0));
}

AssertJ et Google Truth Assertions

Les bibliothèques d'assertions externes comme AssertJ et Google Truth offrent des méthodes supplémentaires pour les assertions d'exception :

AssertJ :

import static org.assertj.core.api.Assertions.*;

@Test
public void testIndexOutOfBoundsException() {
    ArrayList<Object> emptyList = new ArrayList<>();
    assertThatThrownBy(() -> emptyList.get(0))
        .isInstanceOf(IndexOutOfBoundsException.class);
}

Google Vérité :

import static com.google.common.truth.Truth.*;

@Test
public void testIndexOutOfBoundsException() {
    ArrayList<Object> emptyList = new ArrayList<>();
    assertThatCode(() -> emptyList.get(0)).willThrow(IndexOutOfBoundsException.class);
}

Assertions JUnit pré-4.13 (obsolètes)

Pour les versions JUnit antérieures à 4.13, une approche plus lourde consistait à vérifier manuellement l'exception dans un bloc try-catch :

@Test
public void testIndexOutOfBoundsException() {
    boolean thrown = false;
    ArrayList<Object> emptyList = new ArrayList<>();

    try {
        emptyList.get(0);  // Intentionally triggers an exception
    } catch (IndexOutOfBoundsException e) {
        thrown = true;
    }

    assertTrue(thrown);
}

Cette approche est obsolète et moins idiomatique que les méthodes susmentionnées. Reportez-vous à la [JUnit Test-FAQ](https://junit.org/junit4/faq.html) pour plus de détails.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn