Si I @Ignorer une classe de test dans JUnit4, n' @BeforeClass encore courir?
Rapide de fond: j'ai été à la chasse d'un Maven /Surefire de test-exécution de problème pour les jours maintenant, et j'ai rétréci vers le bas à un petit nombre suspect de tests. Le comportement que je vois est fou. Je commence avec mvn clean test
: 250 tests, 0 a été ignoré. Maintenant, je déplace le suspect test en src/test/java
et essayez de nouveau: 146 exécution des tests, 0 a été ignoré! La sortie de Maven donne pas idée de ce que d'autres tests ne sont pas en cours d'exécution, même avec la -X
drapeau.
Qui m'amène à ma question: la raison pour laquelle j'appelle le test de "suspect", c'est que l'ensemble de la classe est décorée avec @Ignorer, donc j'imagine que l'inclure dans mon test de sources de pas effet. Puis il vint à moi, ces classes ont @BeforeClass/@AfterClass méthodes
gérer un mannequin Zookeeper serveur. Il résulte en chancelant comportement avant, c'est pourquoi nous avons les tests @Ignoré.
Si JUnit est en cours d'exécution avant/après le code, mais en ignorant les tests, je n'ai aucune idée de ce qui pourrait arriver (mais ce serait probablement être super mal). Est-ce qui se passe? Est-ce censé arriver? Si oui, comment suis-je censé - à-dire "pour référence, voici un test qui devrait travail, mais les besoins de fixation" lorsqu'il s'agit d' @BeforeClass /@AfterClass? Aussi importante: ce que l'enfer est-ce fait pour Surefire /Maven, qu'il provoque sans rapport avec les tests de de tomber de la surface de la Terre?
mvn clean test
ne fonctionne pas @BeforeClass
dans un @Ignore
classe. Le Skipped
compteur est en augmentation par un seul quel que soit le nombre d' @méthodes d'Essai de la @Ignorer classe. (Maven 2.2.1, jUnit 4.9), Vous devez joindre un peu de code et les numéros de version. Êtes-vous à l'aide d'un test personnalisé coureur?Je ne suis pas en utilisant une mesure de coureur. C'est Maven 3.0.quelque chose, JUnit 4.8.1.
Quel est le numéro de version de votre plugin surefire?
Surefire est 2.7.1
OriginalL'auteur Coderer | 2011-09-23
Vous devez vous connecter pour publier un commentaire.
Si vous avez un test avec le @Ignorer annotation, c'est un comportement normal pour le @BeforeClass & @AfterClass de se faire, si oui ou non tous les tests sont @Ignoré.
Si, cependant, la Classe a un @Ignorer annotation, le @BeforeClass & @AfterClass ne pas se faire rouler.
Pour maven, si vous ne voulez pas exécuter les tests dans une classe particulière, alors vous devez les ignorer dans les recettes ou les pannes. Ajoutez à cela le maven de configuration (voir Maven Plugin Surefire)
Est-il possible que vous ayez oublié que "l'ensemble de la classe est décorée avec @Ignorer"?
Il a dit que les tests ont été ignorées, pas la classe. Vous avez raison que la classe elle-même peut être ignoré.
Euh, mais votre point de vue est juste trop. Il pourrait également signifier qu'il a annoté de chaque méthode avec
@Ignore
. @Coderer?J'ai annoté juste la classe avec
@Ignore
. @Matthieu points, cela signifie avant/après sera toujours exécuté. Je maintiens que c'est un terrible, terrible idée.OriginalL'auteur Matthew Farwell
Environnement: JDK 1.6, plugin surefire 2.9, jUnit 4.8.1, Maven 3.0, 3.0.3, 2.2.1.
J'ai créé cette classe de test:
Puis
mvn clean test
imprimer cette:Fonctionne comme prévu. Si je supprime le
@Ignore
et exécutermvn clean test
encore, il imprime ceci:Donc, ça fonctionne pour moi avec trois différentes versions de Maven. Pas de
@BeforeClass
/@AfterClass
a été exécuté dans@Ignore
d classes.Il y a un (peut-être plus) situation quand
@BeforeClass
/@AfterClass
méthodes pourraient s'exécuter dans un@Ignore
d de la classe de test. C'est quand ton ignoré classe a un pas ignoré sous-classe:Résultats de
mvn clean test
:Dans ce cas, le
@BeforeClass
et la@AfterClass
méthodes s'exécute, car ils sont des méthodes de l'IgnoreSubTest
de la classe de test.@Test
. Donc, Surefire (ou peut-être JUnit?) est déjà arrosé. De deux, j'ai beaucoup trop de code à coller tout ici, mais croyez-moi quand je dis que@Ignore
ing la catégorie provoque de nombreux sans rapport avec les tests de non-exécution, tout en commentant la@BeforeClass
méthodes résout le problème. Je souhaite juste que je pourrais expliquer pourquoi.jUnit, a déclaré que "l'exécution des Tests: 5 ... Ignorée: 1" - Cela veut dire pour moi qu'il a essayé de courir 5 tests et 1 de la 5 a
@Ignore
. Je pense que c'est correct. jUnit fonctionne de cette façon. Pour la 2ème question: vous devriez limiter votre enquête à seulement quelques tests. Enregistrer/valider votre code, d'en choisir 3-4 essais pertinents et supprimer les autres et d'essayer de reproduire un bug avec ce petit sous-ensemble de vos tests. Ensuite modifier à votre question 🙂OriginalL'auteur palacsint