我想知道如何将类实例传递给BeforeAllCallback。
测试:
@ExtendWith(MyExtension.class)
public class IntegrationSpec extends DockerComposeAbstraction {
Myobject example = new Myobject("something");
@Test
public void testSomething() {
//Test something
}
}
MyExtension类:
public class MyExtension implements BeforeAllCallback {
public void beforeAll(ExtensionContext context) throws Exception {
System.out.println(instanceOfMyObject.getSomething);
}
}
我可以使用junit5 @ExtendWith注释吗?
答案 0 :(得分:2)
首先,example
对象应该是静态字段,如果您希望在beforeAll
方法中使用它。
然后,您可以使用programatic extension registration将example
保存为扩展程序中的字段:
public class IntegrationSpec extends DockerComposeAbstraction {
static Myobject example = new Myobject("something");
@RegisterExtension
static MyExtension myExtension = new MyExtension(example);
@Test
public void testSomething() {
//Test something
}
}
扩展名:
public class MyExtension implements BeforeAllCallback {
private Myobject example;
public MyExtension(Myobject example) {
this.example = example;
}
public void beforeAll(ExtensionContext context) throws Exception {
System.out.println(example.getSomething());
}
}
答案 1 :(得分:1)
BeforeAllCallback
始终可以访问提供ExtensionContext
方法的Optional<Object> getTestInstance()
。
对于BeforeAllCallback
,默认情况下会返回空 Optional
,因为默认的测试实例生命周期模式为PER_METHOD
;但是,您可以通过使用@TestInstance(PER_CLASS)
注释测试类来更改该默认行为。如果切换到每个类生命周期模式,getTestInstance()
将返回包含测试实例的Optional
。