我想知道如何将类实例传递给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注释做到这一点吗?
首先,如果你想在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());
}
}
BeforeAllCallback
总是可以使用ExtensionContext
,它提供了Optional<Object> getTestInstance()
方法。
对于BeforeAllCallback
,默认情况下将返回空的Optional
,因为默认的测试实例生命周期模式是PER_METHOD
;但是,您可以通过使用@TestInstance(PER_CLASS)
注释测试类来更改该默认行为。如果切换到每类生命周期模式,getTestInstance()
将返回包含测试实例的Optional
。