1. ホーム
  2. java

[解決済み] JUnit 5でWireMockの@Ruleアノテーションを置き換えるには?

2023-08-10 21:10:10

質問

WireMockをテストで使っているのですが、このようなコードがあります。

@Rule
public WireMockRule wireMockRule = new WireMockRule(8080);

JUnit 5に切り替えたいと思います。ということで、次の依存関係を追加しました(Gradleを使用)。

testCompile('org.junit.jupiter:junit-jupiter-engine:5.1.1')

をインポートしようとすると、何も表示されません。 @Rule アノテーションをインポートしようとしているときは、何も提案されません。

JUnitの依存関係の別のモジュールを追加する必要がありますか?それとも、ルールはJUnit 5ではサポートされていないのでしょうか?そうでない場合、どのように私は置き換えられますか? @Rule アノテーションを置き換えると、テストが再び動作するようになりますか?

どのように解決するには?

一般的な方法として、あなたが @Rule@ClassRule は、JUnit 4 では @ExtendWith Extension という、JUnit 5 で非常に近い機能を提供する関連付けがされています。

これは標準のJUnitライフサイクルフックと同じように動作しますが、抽出されるのは Extension クラスで抽出されます。また、同様に @Rule のように、多くの Extension を必要なだけ追加することができます。

この問題を処理するために、いくつかの可能なアプローチがあります。

  • JUnit 4 の方法を維持する(JUnit 5 は、JUnit 3 または 4 のテストを実行できる JUnit Vintage パートを所有しています)。
  • を書き換えます。 @Rule として Extension .
  • が行う実際の処理を WireMockRule によって行われる実際の処理 (サーバーの起動、テストの実行、サーバーの停止) を、各クラスのテストにおいて @BeforeEach@AfterEach フックメソッドを使用します。
  • のようなJUnit 5 Extensionの方法でWireMockRuleと同等のものを実装している第3のライブラリを使用します。 https://github.com/lanwen/wiremock-junit5

あなたの問題は、すでに JUnit 5 の問題 .