【发布时间】:2019-03-09 20:39:40
【问题描述】:
- 我有 2 个“班级级别”规则:
MyRule1和MyRule2 -
MyRule2取决于MyRule1 -
因此,
MyRule1“before”方法应该在MyRule2“before”方法之前运行。
在 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 的实现。
但我必须在MyRule2 中显式手动调用MyRule1 的beforeAll() 回调。
我希望MyRule2 不对MyRule1 的执行负责。
我通过Extension Model documentation of JUnit 5 但没有找到任何依赖于其他扩展的扩展。
【问题讨论】:
标签: java junit junit5 junit5-extension-model