バティストルの保釈
- 私は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
拡張が実行される順序を制御するに。