JUnit - 1.3 Tester les exceptions avec assertThrows

Parfois, une méthode doit lever une exception dans certaines situations, comme une ArithmeticException. Un test unitaire doit alors vérifier que cette exception est bien levée. Cette leçon présente la méthode assertThrows de JUnit et la façon d'écrire le code à tester.

Le besoin : vérifier qu'une exception est levée

Dans la classe de calcul, une méthode lève une ArithmeticException dans certains cas. Un test ne peut pas simplement appeler cette méthode, car l'exception interromprait l'exécution du test.

Pour tester ce comportement, JUnit fournit la méthode assertThrows. Elle attend deux arguments : la classe de l'exception attendue, et le code à exécuter.

Passer le code à tester avec une expression lambda

Le second argument doit être un Executable, c'est-à-dire un bloc de code exécutable. On le crée avec une expression lambda, une écriture courte qui représente une fonction en Java.

Le test réussit si le code exécuté lève bien l'exception attendue. Dans le cas contraire, le test échoue.

assertThrows(ArithmeticException.class, () -> <methode-a-tester>);

En résumé

Pour vérifier qu'une méthode lève une exception, JUnit propose assertThrows. Cette méthode reçoit la classe de l'exception attendue et une expression lambda contenant le code à exécuter. Le test réussit si l'exception est levée. Le cours suivant poursuit la découverte des tests.

Points clés

  • Un test peut vérifier qu'une exception est bien levée.
  • assertThrows attend la classe de l'exception et le code à exécuter.
  • Une expression lambda permet de passer ce code de façon concise.
  • Appeler directement la méthode dans le test interromprait l'exécution.
  • Le test échoue si l'exception attendue n'est pas levée.

Questions fréquentes

Pourquoi ne pas appeler directement la méthode dans le test ?

Si la méthode lève une exception, le test s'interrompt. assertThrows permet au contraire de vérifier que cette exception est levée.

Qu'est-ce qu'une expression lambda ?

C'est une écriture courte qui représente un bloc de code. En Java, elle prend la forme () suivi d'une flèche et du code à exécuter.

Que se passe-t-il si l'exception n'est pas levée ?

Le test échoue, car l'exception attendue n'a pas été levée par le code testé.