java - 如何创建对于内部有许多嵌套类的整个大类仅运行一次 beforeAll 的扩展

标签 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");
        }
    }

如何使用 MyExtension 运行我的 TestWithManyNested ,整个测试只运行 beforeAll 一次

最佳答案

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

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());
        }
    }
}

关于java - 如何创建对于内部有许多嵌套类的整个大类仅运行一次 beforeAll 的扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52888269/

相关文章:

java - 使用没有 fragment 的选项卡布局

java - 为什么 Hibernate 在我的表上生成重复的主键

java - JMS 112 使用 spring ds 的连接无效

spring-boot - Gradle 5 JUnit BOM 和 Spring Boot 版本不正确

maven - 有什么方法可以并行运行 JUnit5 测试?

java - Junit 5 测试套件

mockito - junit5+weld+mockito扩展,如何注入(inject)@Context对象

java - 检查 JUnit 扩展是否抛出特定异常

spring-boot - 将外部属性传递给 JUnit 的扩展类

java - 非官方 iText 4.2.1 : Purely created magenta color contains 44% of yellow