8
  • 私は2つの「クラスレベル」ルールを持っています:MyRule1そしてMyRule2
  • MyRule2依存するMyRule1
  • MyRule1したがって、「before」メソッドは「before」メソッドの前に実行する必要がありますMyRule2

JUnit 4 では、 RuleChainを介して次のように実装できます。

static MyRule1 myRule1 = new MyRule1();
static MyRule2 myRule2 = new MyRule2(myRule1);

@Rule
TestRule ruleChain = RuleChain.outerRule(myRule1)
        .around(myRule2);

JUnit 5 では、次のように実装する必要があります。

static MyRule1 myRule1 = new MyRule1();

@RegisterExtension
static MyRule2 myRule2 = new MyRule2(myRule1);

MyRule2:

class MyRule2 implements BeforeAllCallback {

    private final MyRule1 myRule1;

    public MyRule2(MyRule1 myRule1) {
        this.myRule1 = myRule1;
    }

    @Override
    public void beforeAll(ExtensionContext extensionContext) {
        this.myRule1.beforeAll();

        X x = this.myRule1.getX();
        // do Rule 2 stuff with x
    }
}

結果に関しては、JUnit 4 の実装と同等です。

しかし、 inのbeforeAll()コールバックを明示的かつ手動で呼び出す必要があります。MyRule1MyRule2

私はそれが実行MyRule2に責任を負わないことを望みMyRule1ます。

JUnit 5の拡張モデルのドキュメントを 調べましたが、他の拡張機能に依存する拡張機能については何も見つかりませんでした。

4

2 に答える 2