1概要

JUnit 5は拡張機能を登録するための複数の方法を提供します。これらの方法のいくつかの概要については、リンク:/junit-5-extensions[Guide to JUnit 5 Extensions]を参照してください。

このクイックチュートリアルでは、


https://junit.org/junit5/docs/current/api/org/junit/jupiter/api/extension/RegisterExtension.htmlを使用して、JUnit

5拡張機能のプログラムによる登録に焦点を当てます。 RegisterExtension]

アノテーション。


2

@ RegisterExtension


このアノテーションをテストクラスのフィールドに適用することができます。

この方法の利点の1つは、テストコンテンツ内のオブジェクトとしてエクステンションに直接アクセスできることです。

JUnitは適切な段階で拡張メソッドを呼び出します。

たとえば、拡張機能が

BeforeEachCallbackを実装している場合、

JUnitはテストメソッドを実行する前に対応するインタフェースメソッドを呼び出します。


3静的フィールドで

@ RegisterExtension

を使用する

静的フィールドで使用された場合、JUnitはクラスレベルの@ @ ExtendWith__ベースの拡張が適用された後にこの拡張のメソッドを適用します。

また、JUnitは拡張機能のクラスレベルとメソッドレベルの両方のコールバックを呼び出します。

たとえば、次の拡張は

beforeAll



beforeEach

の両方の実装を特徴としています。

public class LoggingExtension implements
  BeforeAllCallback, BeforeEachCallback {

   //logger, constructor etc

    @Override
    public void beforeAll(ExtensionContext extensionContext)
      throws Exception {
        logger.info("Type {} In beforeAll : {}",
          type, extensionContext.getDisplayName());
    }

    @Override
    public void beforeEach(ExtensionContext extensionContext) throws Exception {
        logger.info("Type {} In beforeEach : {}",
          type, extensionContext.getDisplayName());
    }

    public String getType() {
        return type;
    }
}

この拡張をテストの静的フィールドに適用しましょう。

public class RegisterExtensionTest {

    @RegisterExtension
    static LoggingExtension staticExtension = new LoggingExtension("static version");

    @Test
    public void demoTest() {
       //assertions
    }
}

出力には、

beforeAll

および

beforeEach

メソッドの両方からのメッセージが表示されます。

Type static version In beforeAll : RegisterExtensionTest
Type static version In beforeEach : demoTest()


4インスタンスフィールドで

@ RegisterExtension

を使用する

静的でないフィールドで

RegisterExtension

を使用した場合、JUnitはすべての

TestInstancePostProcessor

コールバックを処理した後にのみ拡張子を適用します。

この場合、JUnitは

beforeAll

のようなクラスレベルのコールバックを無視します。

上記の例で、

LoggingExtension

から

static

修飾子を削除しましょう。

@RegisterExtension
LoggingExtension instanceLevelExtension = new LoggingExtension("instance version");

出力に見られるように、JUnitは

beforeEach

メソッドを呼び出すだけです。

Type instance version In beforeEach : demoTest()


5結論

この記事では、JUnit 5の拡張機能をプログラムで

@ RegisterExtension

に登録する方法の概要を説明しました。

また、拡張を静的フィールドとインスタンスフィールドに適用することの違いについても説明しました。

いつものように、コード例はhttps://github.com/eugenp/tutorials/tree/master/testing-modules/junit-5[Githubレポジトリ]にあります。