Avant et Après la Suite de l'exécution de crochet dans jUnit 4.x
Je suis en train de préformation de l'installation et le démontage d'un ensemble de tests d'intégration, en utilisant jUnit 4.4 pour exécuter les tests. Le démontage doit être exécuté de manière fiable. Je vais avoir d'autres problèmes avec TestNG, donc je suis à la recherche de port de retour de jUnit. Ce que les crochets sont disponibles pour l'exécution avant tout les tests sont exécutés et après tous les tests sont terminés?
Remarque: nous sommes à l'aide de maven 2 pour notre build. J'ai essayé d'utiliser maven est pre-
& post-integration-test
phases, mais, si un test échoue, maven s'arrête et ne fonctionne pas post-integration-test
, qui n'est d'aucune aide.
- Pour les tests d'intégration, vous devez utiliser le maven-failsafe-plugin au lieu de surefire. Ce ne sera pas sauter
post-integration-test
si un test échoue. Voir aussi cette page du wiki. - pouvez-vous partager vous final de mise en œuvre s'il vous plaît ?
Vous devez vous connecter pour publier un commentaire.
Oui, il est possible de manière fiable exécuter le montage et le démontage des méthodes d'avant et d'après tous les tests dans une suite de tests. Permettez-moi de démontrer dans le code:
De sorte que votre classe Test1 ressemblerait à quelque chose comme:
...et vous pouvez imaginer que Test2 ressemble. Si vous avez exécuté TestSuite, vous obtenez:
De sorte que vous pouvez voir que la mise en place/démonter seulement exécuter avant et après tous les tests, respectivement.
Le hic: cela ne fonctionne que si vous êtes en cours d'exécution de la suite de test, ne pas courir Test1 et Test2 individuels JUnit tests. Vous avez mentionné que vous utilisez maven, et le maven plugin surefire aime exécuter les tests individuellement, et ne fait pas partie d'une suite. Dans ce cas, je recommande la création d'une super-classe, chaque classe de test s'étend. La super-classe contient alors le annotée @BeforeClass et @AfterClass méthodes. Bien que pas aussi propre que la méthode ci-dessus, je pense qu'il va travailler pour vous.
Comme pour le problème de l'échec des tests, vous pouvez configurer maven.test.erreur.ignorez donc que la construction se poursuit sur l'échec des tests. Ce n'est pas recommandé comme une pratique continue, mais il devrait vous permettre de fonctionner jusqu'à ce que l'ensemble de vos tests passent. Pour plus de détails, voir la maven infaillible de la documentation.
Un de mes collègues m'a suggéré ce qui suit: vous pouvez utiliser un personnalisé RunListener et de mettre en œuvre la testRunFinished() méthode: http://junit.sourceforge.net/javadoc/org/junit/runner/notification/RunListener.html#testRunFinished(org.junit.runner.Result)
Pour enregistrer le RunListener il suffit de configurer le plugin surefire comme suit:
http://maven.apache.org/surefire/maven-surefire-plugin/examples/junit.html la section "Utilisation des modules d'écoute personnalisés et reporters"
Cette configuration doit aussi être choisi par le failsafe plugin.
Cette solution est génial parce que vous n'avez pas à spécifier les Suites, la recherche de classes de test ou de l'une de ces trucs - il vous permet de Maven pour faire sa magie, en attente pour tous les tests à la fin.
Vous pouvez utiliser le @ClassRule annotation dans JUnit 4.9+ comme Je l'ai indiqué dans une réponse à une autre question.
À l'aide d'annotations, vous pouvez faire quelque chose comme ceci:
Ici, nous
Comme pour "Remarque: nous sommes à l'aide de maven 2 pour notre build. J'ai essayé d'utiliser maven avant & après-intégration-les phases de test, mais, si un test échoue, maven s'arrête et ne pas courir post-integration-test, qui n'est d'aucune aide."
vous pouvez essayer de le de sécurité-plugin au lieu de cela, je pense qu'il a de la facilité à s'assurer le nettoyage se produit indépendamment de l'installation ou de l'étape intermédiaire de statut
À condition que tous vos tests peuvent s'étendre d'une "technique" de la classe et sont dans le même paquet, vous pouvez faire un petit truc :
Être conscient que cette solution a beaucoup d'inconvénients :
Pour plus d'informations: listClassesIn() => Comment trouvez-vous toutes les sous-classes d'une classe donnée en Java?
Autant que je sache, il n'existe pas de mécanisme pour le faire dans JUnit, cependant, vous pourriez essayer de sous-classement de la Suite et en remplaçant la méthode run() avec une version qui ne fournissent crochets.
Depuis maven-surefire-plugin ne fonctionne pas de la Suite de la classe de première, mais traite de la suite et de classes de test même, de sorte que nous pouvons configurer le plugin ci-dessous pour activer la seule suite de classes et de désactiver tous les tests. Suite exécuter tous les tests.
La seule façon que je pense alors à obtenir les fonctionnalités que vous voulez faire quelque chose comme
Je utiliser quelque chose comme cela dans eclipse, donc je ne suis pas sûr de savoir comment portable c'est en dehors de cet environnement
Si vous ne voulez pas créer une suite et d'avoir la liste de tous vos classes de test, vous pouvez utiliser la réflexion pour trouver le nombre de classes de test de façon dynamique et compte à rebours dans une classe de base @AfterClass de faire la permutation qu'une seule fois:
Si vous préférez utiliser @BeforeClass au lieu des blocs statiques, vous pouvez également utiliser un indicateur booléen à faire la réflexion comte et de la configuration de test qu'une seule fois lors de la première convocation. Espérons que cela aide quelqu'un, il m'a fallu une après-midi pour trouver une meilleure façon que d'énumérer toutes les classes dans une suite.
Maintenant tout ce que vous devez faire est d'étendre cette classe pour tous vos classes de test. Nous avons déjà eu une classe de base pour fournir certaines communes des trucs pour l'ensemble de nos tests, donc c'était la meilleure solution pour nous.
L'Inspiration vient de cette réponse https://stackoverflow.com/a/37488620/5930242
Si vous ne voulez pas prolonger cette classe partout, cette dernière AFIN de répondre à pouvoir faire ce que vous voulez.