- 私は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()
コールバックを明示的かつ手動で呼び出す必要があります。MyRule1
MyRule2
私はそれが実行MyRule2
に責任を負わないことを望みMyRule1
ます。
JUnit 5の拡張モデルのドキュメントを 調べましたが、他の拡張機能に依存する拡張機能については何も見つかりませんでした。