如何将实例传递给实现BeforeAllCallback

时间:2018-03-04 16:54:43

标签: java junit5

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

2 个答案:

答案 0 :(得分: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 :(得分:1)

BeforeAllCallback始终可以访问提供ExtensionContext方法的Optional<Object> getTestInstance()

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