Как создать Extension, который запускается beforeAll только один раз для всего большого класса со многими вложенными классами внутри - PullRequest
0 голосов
/ 19 октября 2018

Учитывая мой проверенный класс со многими вложенными классами внутри:

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

Как мне запустить мой TestWithManyNested с MyExtension, которыйпросто запустите beforeAll только один раз для всего теста

1 Ответ

0 голосов
/ 26 октября 2018

Если вы хотите, чтобы обратные вызовы уровня класса выполнялись только для самого внешнего класса, вы можете переписать свое расширение следующим образом (проверив, что для внешнего класса нет «включающего класса»).

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