如何将实例传递给实现BeforeAllCallback的类

问题描述 投票:0回答:2

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

java junit5
2个回答
2
投票

首先,如果你想在example方法中使用它,那么beforeAll对象应该是一个静态字段。

然后你可以使用programatic extension registrationexample保存为扩展中的字段:

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
投票

BeforeAllCallback总是可以使用ExtensionContext,它提供了Optional<Object> getTestInstance()方法。

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

© www.soinside.com 2019 - 2024. All rights reserved.