Bonjour,
Je vaudrais tester avec jUnit 4 la levée d’une exception. Cela est possible avec Asser.fail()
Mais comment faire si je veux tester le cas ou l’exception n’est pas levée ?
Merci beaucoup
Bonjour,
Je vaudrais tester avec jUnit 4 la levée d’une exception. Cela est possible avec Asser.fail()
Mais comment faire si je veux tester le cas ou l’exception n’est pas levée ?
Merci beaucoup
Soit une méthode method() qui lance une Exception MaException
Pour vérifier que la méthode ne lance pas l'exception, on peut écrire cela
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 try{ method() Assert.assertTrue(true); } catch ( MaException me){ Assert.fail(); }
merci pour la réponse.
donc si j'ai bien compris et en testant ma classe avec junit sur eclipse. si ma méthode me retourne une exception, et je veux tester que je vais tomber dans le bloc catch, le test junit doit m'afficher quoi? c vert ou rouge?
Pourquoi ne pas faire plus simple :
Et pour tester que la même méthode déclenche bien une exception :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 @Test public void monTest() throws MonException { maMethod(); // peut lever une exception dans ce cas le TU échoue }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 @Test public void monTest() { try { maMethod(); Assert.fail("maMethod devrait lancer une exception"); } catch (MonException e) { // Rien dans le catch puisque c'est le comportement attendu. } }
Tu peux aussi utiliser l'attribut expected de l'annotation pour dire qu'une exception est attendue. Si elle n'a pas lieu, JUnit signalera une erreur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part @Test(expected=MonException.class)
++
Foucha.
=========
"du code propre c'est du code qui fait exactement ce qu'on croit que ça fait"
Mes Articles DVP
merci pour vos réponses c'est sympa.
sinon le souci que j'ai trouvé, c'est que moi mon code est de ce genre :
maMethod(){
if (a<b){
throw MonException("exception fonctionnelle")
}
donc le problème que j'ai trouvé quand je teste ma méthode, c'est que ça rentre jamais dans le block catch quand je fait comme ça:
try {
maMethod();
Assert.fail("maMethod devrait lancer une exception");
} catch (MonException e) {
// Rien dans le catch puisque c'est le comportement attendu.
}
mais si je remplace mon exception fonctionnelle par la classe Exception générale de java, ca rentre :
try {
maMethod();
Assert.fail("maMethod devrait lancer une exception");
} catch (Exception e) {
// Rien dans le catch puisque c'est le comportement attendu.
}
C'est quoi le problème à votre avis?
Je me demande si le fait d'etre dans le catch ne serait pas plutot lié à ton Assert.fail qu'à l'appel de maMethod()... affiche la et tu en auras le coeur net. En gros ton exception n'est pas lancée : b > a.
Dans tous les cas, vraiment, utilise plutot l'attribut expected car c'est beaucoup plus lisible, tu n'as pas à faire de bidouilles avec des try catch combiné à des assert.fail et on voit tout de suite qu'une exception est attendue, en plus de savoir laquelle.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 @Test(expected=MonException.class) public void test_whenABiggerThanB() MonObjet o = new MonObjet(); o.setA(0); o.setB(2); maMethod(); } @Test public void test_whenASmallerThanB() MonObjet o = new MonObjet(); o.setA(2); o.setB(0); maMethod(); // Mets tes assertions normales }
++
Foucha.
=========
"du code propre c'est du code qui fait exactement ce qu'on croit que ça fait"
Mes Articles DVP
merci pour ta réponse. c'est gentil.
je vais essayer cette méthode et je te tiendrai au courant.
bonne journée
Partager