Le cas des tests unitaires a toujours été un sujet difficile à appréhender lors de la première rédaction de tests. Et c’est seulement avec le temps qu’on perfectionne nos tests.
Aujourd’hui j’espère vous faire gagner un tantinet de temps par rapport à la rédaction de tests JUnit traitant du cas des exceptions.
Restez général
Lorsque l’appel à une méthode peut déclencher une exception (exemple : NumberFormatException), la méthode @Test doit déclarer une exception de type Exception.
Il ne s’agit pas là d’une obligation mais plutôt d’une recommandation pour 2 raisons :
- Si un jour la méthode testée peut déclencher une autre exception, vous n’aurez pas besoin de modifier vos méthodes @Test
- Que ce soit NumberFormatException ou Exception, si une méthode @Test déclenche une exception elle marquera votre test comme échouant
Don’t
@Test
public void parseInt_validInput() throws NumberFormatException {
Integer.parseInt("42");
}
Do
@Test
public void parseInt_validInput() throws Exception {
Integer.parseInt("42");
}
Utilisez la puissance de @Test
Maintenant, rédigeons le JUnit qui va tester le cas où la méthode va déclencher une exception.
Comme tout le monde, la première fois j’ai englobé l’appel de ma méthode par un bloc try-catch, en mettant un Assert affreux dans le catch :
Assert.assertTrue(true);
Depuis j’ai trouvé que l’annotation @Test nous propose l’attribut « expected » qui permet de définir le type de l’exception attendue.
Don’t
@Test public void parseInt_alphaInput() { try { Integer.parseInt("AZE"); Assert.fail("An NumberFormatException must be thrown!"); } catch (NumberFormatException nfe) { Assert.assertTrue(true); } }
Do
@Test(expected = NumberFormatException.class)
public void parseInt_alphaInput() throws Exception {
Integer.parseInt("AZE");
}
1 réflexion sur “JUnit : Gérez-moi ces exceptions que je ne saurais voir”
Pour plus d’information sur le langage Java, vous pouvez suivre les cours dont les descriptifs sont accessibles sur ces liens :
https://easyteam.fr/formation-oracle/Catalogue/java-se-7-fundamentals-D67234
https://easyteam.fr/formation-oracle/Catalogue/java-se-7-programming-D67238
https://easyteam.fr/formation-oracle/Catalogue/java-se-7-develop-rich-client-applications-D67230
https://easyteam.fr/formation-oracle/Catalogue/java-se-performance-tuning-D62066
Les commentaires sont fermés.