Code:-
try {
Assert.assertEquals("1", "2");
} catch (Exception e) {
System.out.println("I am in error block");
}
Si les instructions assert échouent, je voudrais capturer l'erreur dans le bloc catch. J'essaie avec le code ci-dessus et ce n'est pas le cas.
L'erreur d'assertion sera-t-elle détectée dans un bloc catch pour Java exception?
Vous avez presque répondu à votre propre question. Votre bloc catch n'attrapera pas le AssertionError
que le Assert
lance s'il échoue, car il s'agit d'un Error
(ou, plus précisément, il étend Java.lang.Error
). Voir la documentation pour plus d'informations à ce sujet. Votre bloc catch n'attrape que Throwable
objets qui s'étendent Java.lang.Exception
Si vous voulez vraiment l'attraper - vous devez utiliser
catch (AssertionError e) {
...
Cependant, comme d'autres ont mentionné , ceci est une façon très inhabituelle d'utiliser les assertions - elles devraient généralement réussir et si elles échouent, il est très inhabituel que vous souhaitiez continuer l'exécution du programme. C'est pourquoi l'échec lance un Error
plutôt qu'un Exception
. Vous pouvez en savoir plus sur (pas) la capture de Error
dans cette question .
Êtes-vous sûr de ne pas vouloir simplement un test - if ( variableName == "1")
?
[~ # ~] nb [~ # ~] si vous testez du code auxiliaire de test unitaire, comme un matcher, il peut être judicieux d'attraper le AssertionError
.
Eh bien, je crois que vous utilisez JUnit pour écrire vos tests. Dans ce cas, vous ne devez pas intercepter votre Assert.assertEquals()
car elle doit passer pour l'exécution normale du test. S'il lève une exception, cela signifie que votre code ne fonctionne pas comme il se doit.
Si vous souhaitez détecter les erreurs de cette manière, vous avez besoin de quelque chose comme ceci:
if (num == 1 || num == 2) {
throw new Exception();
}
Vous pouvez créer votre propre classe d'exception et transmettre le message souhaité.
Si vous voulez intercepter les instances Exception
et Error
, utilisez:
...
catch (Throwable t)
{
...
}
Puisque Exception
et Error
étendent Throwable
.