Dans JUnit, tester le code qui doit lever une exception nécessite une approche propre et concise. Bien qu'il soit possible de vérifier manuellement les exceptions, ce n'est pas une méthode idiomatique.
Dans les versions JUnit 5 et 4.13, vous pouvez utiliser l'annotation @Test(expected = ExceptionClass.class) sur la méthode de test. Cela s'attend à ce que l'exception spécifiée soit levée.
Exemple :
@Test(expected = IndexOutOfBoundsException.class) public void testIndexOutOfBoundsException() { ArrayList emptyList = new ArrayList(); emptyList.get(0); }
Si vous utilisez des bibliothèques comme AssertJ ou Google-Truth, vous pouvez employer leurs affirmations pour valider exceptions.
AssertJ :
import static org.assertj.core.api.Assertions.assertThatThrownBy; @Test public void testFooThrowsIndexOutOfBoundsException() { assertThatThrownBy(() -> foo.doStuff()).isInstanceOf(IndexOutOfBoundsException.class); }
Google-Truth :
import static com.google.common.truth.Truth.assertThat; @Test public void testFooThrowsIndexOutOfBoundsException() { assertThat(assertThrows(IndexOutOfBoundsException.class, foo::doStuff)).isNotNull(); }
Dans les versions JUnit inférieures ou égales à 4.12, vous pouvez utiliser Rule ou TryCatch pour gérer les exceptions.
Utilisation de la règle :
@Rule public ExpectedException thrown = ExpectedException.none(); @Test public void testIndexOutOfBoundsException() { thrown.expect(IndexOutOfBoundsException.class); ArrayList emptyList = new ArrayList(); emptyList.get(0); }
Utilisation de TryCatch :
import static org.junit.Assert.assertEquals; @Test public void testIndexOutOfBoundsException() { try { ArrayList emptyList = new ArrayList(); emptyList.get(0); fail("IndexOutOfBoundsException was expected"); } catch (IndexOutOfBoundsException e) { assertEquals(e.getClass(), IndexOutOfBoundsException.class); } }
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!