Maison >Java >javaDidacticiel >Comment affirmer efficacement les exceptions dans les tests JUnit ?
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!