Dans JUnit 5, comment faire pour exécuter du code avant de tous les tests
La @BeforeAll
annotation marque une méthode à exécuter avant tous les tests dans un classe.
http://junit.org/junit5/docs/current/user-guide/#writing-tests-annotations
Mais est-il un moyen d'exécuter du code avant tous tests, dans toutes les classes?
Je veux m'assurer que les tests d'utiliser un certain ensemble de connexions de base de données, et le mondial de configuration à une seule de ces connexions doivent se produire avant de course tout tests.
quelle est cette méthode ?
Juste pour mémoire: dans le cas où vous trouvez l'une des réponses les aider - s'il vous plaît envisager d'accepter l'un d'eux à un certain point 😉
Juste pour mémoire: dans le cas où vous trouvez l'une des réponses les aider - s'il vous plaît envisager d'accepter l'un d'eux à un certain point 😉
OriginalL'auteur Rob N | 2017-04-07
Vous devez vous connecter pour publier un commentaire.
Ceci n'est actuellement pas pris en charge, mais il y a une pull request pour JUnit 5 à ce sujet: Introduire le support pour avant/après des rappels une fois par l'ensemble de l'essai.
OriginalL'auteur Stefan Birkner
C'est désormais possible dans JUnit5 par la création d'une Extension personnalisée, à partir de laquelle vous pouvez vous inscrire à un arrêt de crochet sur le test de racine de contexte.
Votre extension devrait ressembler à ceci;
Ensuite, toutes les classes de tests où vous avez besoin de ce exécuté au moins une fois, peut être annotée avec:
Lorsque vous utilisez cette extension sur plusieurs classes, le démarrage et l'arrêt de la logique va être appelée une fois.
OriginalL'auteur Philipp Gayret
Vous pouvez marquer chacune de vos classes de test qui utilise votre base de données avec une interface qui définit une
static
BeforeAll
(de sorte qu'il ne peut pas être remplacée). par exemple:Cette méthode sera appelée une fois pour chaque mise en œuvre de la classe de sorte que vous aurez besoin de définir une méthode pour initialiser vos connexions qu'une seule fois et puis ne rien faire pour les autres appels.
OriginalL'auteur mfulton26
Je ne suis pas au courant d'un moyen de le faire.
Je voudrais simplement assurez-vous que tous les code pour @BeforeAll appelle un certain singleton à faire que init (probablement dans une manière paresseuse pour éviter les répétitions).
Probablement pas pratique ... la seule autre option que je vois: je suppose que votre tests s'exécutent à l'intérieur d'une machine virtuelle java spécifique de l'emploi. Vous pourrait crochet un agent dans la JVM terme, qui n'est qu'init travail pour vous.
Au-delà: à la fois des suggestions de sons, un peu comme un hack pour moi. Le réel répondre à mes yeux: pas en arrière, et d'examiner attentivement votre environnement sur ses dépendances. Et puis trouver un moyen de préparer votre environnement de manière à ce que vos tests à venir et de la "bonne chose" se passe automatiquement. En d'autres termes: envisager de chercher dans l'architecture que vous acheté ce problème.
OriginalL'auteur GhostCat