41 votes

Test JUnit - analyse des exceptions attendues

Dans JUnit, j'utilise actuellement l'annotation pour s'attendre à une exception dans mes tests.

Existe-t-il un moyen d’analyser cette exception? Par exemple, je m'attends à CriticalServerException , mais je souhaite également vérifier le contenu de la méthode getMessage .

68voto

Filippo Points 1964

Si vous avez JUnit 4.7 ou supérieur, essayez ExpectedException

Il y a un exemple dans cette question , qui est copié ci-dessous:

 @Rule
public ExpectedException exception = ExpectedException.none();

@Test
public void testRodneCisloRok(){
    exception.expect(IllegalArgumentException.class);
    exception.expectMessage("error1");
    new RodneCislo("891415",dopocitej("891415"));
}
 

21voto

Progman Points 2244

Je ne suis pas sûr si vous devez. À l'aide d'un bloc try-catch pour vérifier le message d'erreur est donc junit3ish. Nous avons cette fonctionnalité cool maintenant que vous pouvez écrire @Test(expected=CriticalServerException.class) et que vous voulez aller "retour" et l'utilisation de try-catch de nouveau pour aller chercher une exception vous attendent, juste pour vérifier le message d'erreur?

OMI, vous devriez rester pour l' @Test(expected=CriticalServerException.class) d'annotation et d'ignorer le message d'erreur. Vérifier le message d'erreur, qui peut être changé beaucoup de choses car il est plus "lisible" chaîne et non une valeur technique, peut également être difficile. Vous forcez l'exception d'avoir un message d'erreur spécifique, mais vous pourriez ne pas savoir qui a généré l'exception et ce message d'erreur qu'il a choisi.

En général, vous souhaitez tester si la méthode lève une exception ou pas, et pas que le message d'erreur ressemble. Si le message d'erreur est vraiment si important que vous devriez peut-être envisager d'utiliser une sous-classe de l'exception, il jette et le vérifier en @Test(expected=...).

12voto

Jigar Joshi Points 116533
try{ 
    //your code expecting to throw an exception
    fail("Failed to assert :No exception thrown");
} catch(CriticalServerException ex){
    assertNotNull("Failed to assert", ex.getMessage()) 
    assertEquals("Failed to assert", "Expected Message", ex.getMessage());
}

2voto

Brian Points 4716
try
{
    // your code

    fail("Didn't throw expected exception");
}
catch(CriticalServerException e)
{
    assertEquals("Expected message", e.getMessage());
}

2voto

Alex Points 140
try {
    // test code invacation
    fail("Exception not throw!!!");
} catch(CriticalServerException ex) {
    assertTrue("Invalid exception data", ex.toString().contains("error text"));
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X