JUnitの5中@RuleChainの同等とは何ですか?

バティストルの保釈
  • 私は2「クラスレベル」のルールがありますMyRule1し、MyRule2
  • MyRule2 依存 MyRule1
  • MyRule1したがって、この方法は、前に実行する必要があります「の前に」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実装と同等です。

しかし、私は明示的に、手動で呼び出す必要がありますbeforeAll()のコールバックMyRule1ではMyRule2

私は希望MyRule2の責任ではないでしょうMyRule1実行。

私は通過したのJUnit 5の拡張モデルのドキュメントが、他の拡張機能に依存して拡張機能の何かを見つけることができませんでした。

サムBrannen:

経て登録された拡張機能の場合@RegisterExtension、JUnitの4者への組み込みサポート類似は(JUnitの木星5.3.1のように)今のところありませんRuleChain

しかし、この問題は、カスタムソリューションにリンクしてものためのサポートを提案@Order拡張が実行される順序を制御するに。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=171464&siteId=1