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
Version imprimable
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:
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:
1
2
3
4
5 @Test public void monTest() throws MonException { maMethod(); // peut lever une exception dans ce cas le TU échoue }
Code:
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. } }
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:
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 }
merci pour ta réponse. c'est gentil.
je vais essayer cette méthode et je te tiendrai au courant.
bonne journée