web-dev-qa-db-ger.com

Wie ersetze ich @Rule Annotation in Junit 5?

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.

15
IKo

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 Extensions hinzugefügt werden.

Um das Problem zu lösen, gibt es verschiedene Ansätze:

  • behalten Sie den JUnit 4-Weg (JUnit 5 besitzt den JUnit Vintage-Teil, mit dem Sie JUnit 3 oder 4-Tests ausführen können).
  • schreibe das @Rule als Extension.
  • führe die eigentliche Verarbeitung durch WireMockRule (starte den Server, führe deine Tests aus und stoppe den Server) in jedem Test der Klasse mit @BeforeEach und @AfterEach Hook-Methoden.
  • verwenden Sie eine dritte Bibliothek, die das Äquivalent von WireMockRule in der JUnit 5-Erweiterungsmethode implementiert, z. B. https://github.com/lanwen/wiremock-junit5

Beachten Sie, dass Ihr Problem bereits in den JUnit 5-Problemen behandelt wurde.

6
davidxxx

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:

  1. Führen Sie JUnit 4-Tests neben JUnit 5-Tests mit der Junit-Vintage-Engine aus.
  2. Starten und stoppen Sie den Server selbst im Testcode.
  3. Verwenden Sie eine Drittanbieter-Erweiterung wie wiremock-junit5 oder wiremock-extension .
2
Arho Huttunen