Ich benutze Wiremock in meinen Tests und habe eine solche Codezeile:
@Rule
public WireMockRule wireMockRule = new WireMockRule(8080);
Ich möchte zu Junit 5 wechseln. Deshalb habe ich die nächste Abhängigkeit hinzugefügt (mit gradle):
testCompile('org.junit.jupiter:junit-jupiter-engine:5.1.1')
Aber es gibt keine Vorschläge, wenn ich versuche, @ Regel-Annotation zu importieren. Muss ich ein weiteres Modul für die Junit-Abhängigkeit hinzufügen? Oder werden Regeln in Junit5 nicht unterstützt? Wenn nicht, wie kann ich die @ Regel-Annotation ersetzen, damit die Tests wieder funktionieren? Vielen Dank.
Im Allgemeinen, was Sie mit @Rule
und @ClassRule
in JUnit 4 sollte mit @ExtendWith
und Extension
bieten eine sehr enge Funktion in JUnit 5.
Es funktioniert als standardmäßiger JUnit-Lifecycle-Hook, wird jedoch in einer Extension
-Klasse extrahiert. Und ähnlich wie @Rule
, für eine Testklasse können beliebig viele Extension
s hinzugefügt werden.
Um das Problem zu lösen, gibt es verschiedene Ansätze:
@Rule
als Extension
.WireMockRule
(starte den Server, führe deine Tests aus und stoppe den Server) in jedem Test der Klasse mit @BeforeEach
und @AfterEach
Hook-Methoden.Beachten Sie, dass Ihr Problem bereits in den JUnit 5-Problemen behandelt wurde.
JUnit 4 Anmerkungen @Rule
und @ClassRule
gibt es in JUnit 5 nicht. Grundsätzlich gibt es ein neues Erweiterungsmodell, mit dem Erweiterungen mit der gleichen Funktionalität implementiert werden können. Diese Erweiterungen können mit dem @ExtendWith
Anmerkung.
Für eine Teilmenge der JUnit 4-Regeln im Modul junit-jupiter-migrationsupport gibt es eine eingeschränkte Migrationsunterstützung. Leider ist es nur auf Unterklassen von ExternalResource
und Verifier
beschränkt.
Bevor wiremock offiziellen Support für JUnit hat, haben Sie einige Workarounds: