OK, donc l' @Ignore
annotation est bonne pour marquer qu'un scénario de test ne doit pas être exécuté.
Cependant, je souhaite parfois ignorer un test basé sur des informations d'exécution. Un exemple pourrait être si j'ai un test de concurrence qui doit être exécuté sur une machine avec un certain nombre de cœurs. Si ce test était exécuté sur une machine à processeur unique, je ne pense pas qu'il serait correct de simplement passer le test (car il n'a pas été exécuté), et il ne serait certainement pas correct d'échouer le test et de casser la construction .
Je veux donc pouvoir ignorer les tests au moment de l'exécution, car cela semble être le bon résultat (puisque le cadre de test permettra à la génération de passer mais d'enregistrer que les tests n'ont pas été exécutés). Je suis assez sûr que l'annotation ne me donnera pas cette flexibilité, et je pense que je devrai créer manuellement la suite de tests pour la classe en question. Cependant, la documentation ne mentionne rien à ce sujet et en regardant à travers l' API, il n'est pas clair non plus comment cela serait fait par programme (c'est-à-dire comment créer par programmation une instance de Test
ou similaire qui est équivalente à celle créée par l' @Ignore
annotation?).
Si quelqu'un a fait quelque chose de similaire dans le passé ou a une idée brillante de la façon dont je pourrais procéder, je serais heureux d'en entendre parler.
la source
@BeforeClass
annotation, où vous pouvez faire échouer votre hypothèse, ce qui ignorera toute la classe. Un autre est@ClassRule
(pour le contrôle à grain fin, mais sur toute la classe, une fois).Vous devez vérifier le
Junit-ext
projet. Ils ont uneRunIf
annotation qui effectue des tests conditionnels, comme:[Exemple de code extrait de leur tutoriel]
la source
Assume
directement afin de ne pas introduire une autre dépendance.@RunIf
sépare la condition quand un test doit être exécuté à partir du code de test réel, ce qui, je pense, est bon. Ce que je n'aime pas, c'est que cela nécessite un testeur particulier. J'ai donc écrit une règle JUnit pour ignorer conditinoally les tests.Dans JUnit 4, une autre option pour vous peut être de créer une annotation pour indiquer que le test doit répondre à vos critères personnalisés, puis étendre le programme d'exécution par défaut avec vos propres et en utilisant la réflexion, basez votre décision sur les critères personnalisés. Cela peut ressembler à ceci:
la source
BlockJUnit4ClassRunner
ne propose plus laisIgnored
méthode.Une note rapide:
Assume.assumeTrue(condition)
ignore le reste des étapes mais réussit le test. Pour échouer au test, utilisez l'org.junit.Assert.fail()
intérieur de l'instruction conditionnelle. Fonctionne de la même manièreAssume.assumeTrue()
mais échoue au test.la source