Java 如何将实例传递到实现BeforeAllCallback的类中

Java 如何将实例传递到实现BeforeAllCallback的类中,java,junit5,Java,Junit5,我想知道如何将类实例传递到BeforeAllCallback中 测试: @ExtendWith(MyExtension.class) public class IntegrationSpec extends DockerComposeAbstraction { Myobject example = new Myobject("something"); @Test public void testSomething() { //Test somethin

我想知道如何将类实例传递到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 annotation实现这一点吗?

首先,如果希望在
之前的
方法中使用
示例
对象,那么它应该是一个静态字段

然后,您可以使用将
示例
另存为扩展名中的字段:

公共类集成规范扩展了DockerComposeAbstraction{
静态Myobject示例=新的Myobject(“某物”);
@注册扩展
静态MyExtension MyExtension=newmyextension(示例);
@试验
公共空间{
//试验
}
}
及延长期限:

公共类MyExtension实现BeforeAllCallback{
私有对象示例;
公共MyExtension(Myobject示例){
这个例子=例子;
}
public void beforeAll(ExtensionContext上下文)引发异常{
System.out.println(例如.getSomething());
}
}

首先,如果您希望在
之前的
方法中使用对象,那么
示例
对象应该是一个静态字段

然后,您可以使用将
示例
另存为扩展名中的字段:

公共类集成规范扩展了DockerComposeAbstraction{
静态Myobject示例=新的Myobject(“某物”);
@注册扩展
静态MyExtension MyExtension=newmyextension(示例);
@试验
公共空间{
//试验
}
}
及延长期限:

公共类MyExtension实现BeforeAllCallback{
私有对象示例;
公共MyExtension(Myobject示例){
这个例子=例子;
}
public void beforeAll(ExtensionContext上下文)引发异常{
System.out.println(例如.getSomething());
}
}

A
BeforeAllCallback
始终可以访问
ExtensionContext
,它提供了一个
可选的getTestInstance()
方法


对于
BeforeAllCallback
,默认情况下将返回空的
可选
,因为默认的测试实例生命周期模式是
PER_METHOD
;但是,您可以通过使用
@TestInstance(PER_class)
注释您的测试类来更改该默认行为。如果切换到每类生命周期模式,
getTestInstance()
将返回一个包含测试实例的
Optional

A
BeforeAllCallback
始终可以访问
ExtensionContext
,它提供了一个
Optional getTestInstance()
方法


对于
BeforeAllCallback
,默认情况下将返回空的
可选
,因为默认的测试实例生命周期模式是
PER_METHOD
;但是,您可以通过使用
@TestInstance(PER_class)
注释您的测试类来更改该默认行为。如果切换到每类生命周期模式,
getTestInstance()
将返回一个包含测试实例的
Optional

是,可以使用
static
字段完成。我会发布一个答案。是的,它可以通过
静态
字段来完成。我会发布一个答案。