如何创建在所有大型类中都具有嵌套的类之前仅运行一次的扩展

时间:2018-10-19 08:09:24

标签: java junit5 junit5-extension-model

给出我的测试类,其中包含许多嵌套类:

class TestWithManyNested {

    @RegisterExtension
    static MyExtension extension = new MyExtension();

    @Nested
    class Nested1 {

        @Test
        void nested1() {
        }
    }

    @Nested
    class Nested2 {

        @Test
        void nested2() {
        }
    }
}

这是我的简单扩展名:

static class MyExtension implements BeforeAllCallback, AfterAllCallback, BeforeEachCallback, AfterEachCallback {

        @Override
        public void beforeAll(ExtensionContext extensionContext) throws Exception {
            System.out.println("beforeAll");
        }

        @Override
        public void afterAll(ExtensionContext extensionContext) throws Exception {
            System.out.println("afterAll");
        }
    }

如何将TestWithManyNestedMyExtension一起运行beforeAll,而整个测试只运行一次{p}

1 个答案:

答案 0 :(得分:1)

如果只希望对最外层的类执行类级别的回调,则可以按以下方式重写扩展名(检查最外层的类是否没有“封闭类”)。

static class MyExtension implements BeforeAllCallback, AfterAllCallback {

    @Override
    public void beforeAll(ExtensionContext extensionContext) throws Exception {
        Class<?> testClass = extensionContext.getRequiredTestClass();
        if (testClass.getEnclosingClass() == null) {
            System.err.println("beforeAll: " + testClass.getName());
        }
    }

    @Override
    public void afterAll(ExtensionContext extensionContext) throws Exception {
        Class<?> testClass = extensionContext.getRequiredTestClass();
        if (testClass.getEnclosingClass() == null) {
            System.err.println("afterAll: " + testClass.getName());
        }
    }
}