J'utilise wiremock dans mes tests et j'ai une telle ligne de code:
@Rule
public WireMockRule wireMockRule = new WireMockRule(8080);
Je veux passer à Junit 5. J'ai donc ajouté la dépendance suivante (en utilisant gradle):
testCompile('org.junit.jupiter:junit-jupiter-engine:5.1.1')
Mais il n'y a aucune suggestion lorsque j'essaie d'importer une annotation @Rule. Dois-je ajouter un autre module de dépendance junit? Ou les règles ne sont pas prises en charge dans Junit5? Sinon, comment puis-je remplacer l'annotation @Rule pour que les tests fonctionnent à nouveau? Merci.
D'une manière générale, ce que vous avez fait avec @Rule
et @ClassRule
dans JUnit 4 doit être fait avec @ExtendWith
et Extension
qui associés fournissent une fonctionnalité très proche dans JUnit 5.
Il fonctionne comme des hooks de cycle de vie JUnit standard mais il est extrait dans une classe Extension
. Et de la même manière que @Rule
, autant de Extension
s que nécessaire peuvent être ajoutés pour une classe de test.
Pour gérer le problème, vous avez plusieurs approches possibles parmi:
@Rule
en tant que Extension
.WireMockRule
(démarrer le serveur, exécuter vos tests et arrêter le serveur) dans chaque test de classe avec @BeforeEach
et @AfterEach
méthodes de hook.Notez que votre problème a déjà été abordé dans les problèmes JUnit 5 .
JUnit 4 annotations @Rule
et @ClassRule
n'existent pas dans JUnit 5. Fondamentalement, il existe un nouveau modèle d'extension qui peut être utilisé pour implémenter des extensions avec les mêmes fonctionnalités. Ces extensions peuvent être utilisées avec le @ExtendWith
annotation.
Il existe un support de migration limité pour un sous-ensemble de règles JUnit 4 dans le module junit-jupiter-migrationsupport . Malheureusement, il n'est limité qu'aux sous-classes de ExternalResource
et Verifier
.
Avant que wiremock n'ait un support officiel pour JUnit, vous avez quelques solutions: