Java: à l'aide d'un enregistreur de JUnit assert*
Ce que je veux faire, c'est quelque chose comme ce qui suit dans JUnit:
assertTrue(logger.error("the condition is not true"), <a boolean condition>);
de sorte que le message d'erreur est journalisé par un enregistreur, où l'enregistreur peut être par exemple des communes ou de log4j.
Mais Junit affirme ne pas prendre un enregistreur de param, donc, il y a un moyen de parvenir à cela, ou dois-je le try-catch de l'affirmer et de le journal le message d'erreur dans le bloc catch?
OriginalL'auteur shrini1000 | 2012-05-24
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser un JUnit TestRule TestWatcher. Un
TestRule
d'exécuter du code avant et après le test de la méthode (similaire à@Before
et@After
), mais vous avez accès à plus d'informations, et plus important encore, le résultat du test. Un TestWatcher définit des méthodes commesucceeded()
,failed()
,starting()
etfinished()
, que vous pouvez mettre en œuvre pour être au courant des événements.L'exemple suivant imprime simplement l'échec des tests avec l'échec des assertions.
Vous pouvez évidemment faire ce que vous aimez au lieu de le Système..println(). Ce produit en sortie:
Noter qu'un échec d'assertion est une exception, de sorte que vous aurez accès à la stacktrace etc.
La version de JUnit introduit cette?
TestWatcher a été introduit en 4.9, il a été présenté comme un remplacement pour TestWatchman, qui lui-même a été introduit en 4.7. TestWatchman est un peu autre chose, il utilise MethodRule, qui est maintenant obsolète.
OriginalL'auteur Matthew Farwell
Je ne voudrais pas de modifier ou de prolonger la JUnit classes.
Un arrangement où vous try/catch et le journal des erreurs serait préférable.
Le problème est qu'en l'absence d'une Assertion n'est pas nécessairement une exception.
Il se sent comme vous êtes à essayer de faire de log4j dans la capacité d'établissement de rapports qui existe déjà. Je conseille que vous regardez dans la Fourmi JUnit mission de reporting - il vais vous donner un joli rapport qui sera plus utile qu'un journal.
Mise à JOUR:
Vous pouvez toujours ajouter un autre fichier log4j appender. Laissez log4j écrire des messages à la fois sur la console et le fichier que vous choisissez. Pas de changements dans votre code à tout si je suis correct.
Un défaut (junit) assert est une Exception, plus précisément un AssertionError. C'est de cette façon JUnit œuvres.
Je n'ai jamais rattraper les erreurs quand j'écris JUnit. Je code pour le faire Valoir de réussir ou, dans les cas où j'attends une exception, j'ai ajouter l'annotation de le dire. Vous avez peut-être raison de dire que JUnit est de travailler de cette façon, sous les couvertures, mais je ne veux pas avoir de code.
re: la capture des erreurs, moi non plus, sauf quand je suis en essais pour eux. J'essaie juste de préciser que JUnit fonctionne comme ça sous les couvertures. Si vous faites une assertion qui échoue, il va arrêter l'exécution de la méthode d'essai en raison d'une AssertionError a été levée.
Merci pour la clarification, Matthieu. Je pense que nous sommes d'accord, sauf pour la partie sur la capture des erreurs. Ma préférence est d'utiliser le @attend d'annotation, mais c'est plus d'un style de chose. Vos points sur les nouvelles annotations ci-dessus sont très appréciées.
OriginalL'auteur duffymo
Mieux utiliser ce alors
OriginalL'auteur Harshavardhan Konakanchi