web-dev-qa-db-ja.com

Junit 5で@Ruleアノテーションを置き換える方法は?

私はテストでwiremockを使用していますが、そのようなコード行があります:

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

Junit 5に切り替えたいので、次の依存関係を追加しました(gradleを使用)。

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

しかし、@ Ruleアノテーションをインポートしようとすると、提案はありません。 junit依存関係の別のモジュールを追加する必要がありますか?または、ルールはJunit5でサポートされていませんか?そうでない場合は、@ Ruleアノテーションを置き換えてテストを再び機能させるにはどうすればよいですか?ありがとう。

15
IKo

一般的な方法では、JUnit 4で@Ruleおよび@ClassRuleで行ったことは、 @ExtendWith および Extension 関連付けられていることにより、JUnit 5で非常に近い機能が提供されます。
標準のJUnitライフサイクルフックとして機能しますが、Extensionクラスで抽出されます。 @Ruleと同様に、必要な数のExtensionsをテストクラスに追加できます。

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

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

JUnit 5の問題 で既に説明した問題に注意してください。

6
davidxxx

JUnit 4アノテーション@Ruleおよび@ClassRuleはJUnit 5には存在しません。基本的に、同じ機能を持つ拡張機能を実装するために使用できる新しい拡張機能モデルがあります。これらの拡張機能は、@ExtendWith注釈。

junit-jupiter-migrationsupportモジュールでは、JUnit 4ルールのサブセットの移行サポートが制限されています。残念ながら、それはExternalResourceVerifierのサブクラスのみに制限されています。

WiremockがJUnitを公式にサポートする前に、いくつかの回避策があります。

  1. JUnit 4テストをjunit-vintage-engineでJUnit 5テストと並べて実行します。
  2. テストコードで自分でサーバーを起動および停止します。
  3. wiremock-junit5 または wiremock-extension のようなサードパーティの拡張機能を使用します。
2
Arho Huttunen