JUnit 5 - обеспечение setUp и tearDown для всего комплекта тестов - PullRequest
0 голосов
/ 28 мая 2018

Мое требование - выполнить некоторую инициализацию для набора тестов и очистить ее после завершения всех тестов.Эти тесты охватывают несколько тестовых классов, поскольку они не тесно связаны, но требуют общей инициализации.

Я использую @SelectClasses для формирования набора и пытаюсь использовать @ExtendWith с помощью пользовательского расширенияэто должно обрабатывать до и после обработки.Это не работает, и я не уверен, существует ли соответствующее решение в JUnit.Совместное использование примера кода того, что уже было предпринято.

Набор:

@SelectClasses({FirstTest.class, SecondTest.class})
@ExtendWith(SuiteExtension.class)
@RunWith(JUnitPlatform.class)
@SuiteDisplayName("test suite")
public class SuiteClass {
}

Расширение:

public class SuiteExtension implements BeforeAllCallback, AfterAllCallback {

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

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

Испытательный класс 1:

public class FirstTest {

    @Test
    void test1(){
        System.out.println("test1");
    }
}

Испытательный класс 2:

public class SecondTest {

    @Test
    void test2(){
        System.out.println("test2");
    }
}

Выход:

test1
test2

Ожидаемый результат:

beforeAll
test1
test2
afterAll

1 Ответ

0 голосов
/ 28 мая 2018

Объединение @RunWith (из JUnit 4) и @ExtendWith (из JUnit Jupiter) не поддерживается: это механизмы расширения из двух разных структур.

Технически говоря, ваш SuiteClass является JUnit4 тестовый класс.Таким образом, JUnit Jupiter не будет регистрировать или выполнять какие-либо расширения для него.

Что касается наборов в JUnit 5, мы (команда JUnit) планируем предоставить первоклассную поддержку для наборов, которыене требуется JUnit 4 Runner (т. е. @RunWith(JUnitPlatform.class)).Подробности смотрите во всех GitHub проблемах, помеченных как "suites" .Не стесняйтесь смотреть и / или комментировать любые из этих проблем.

Тем временем, я полагаю, самым близким к реализации поддержки JUnit Jupiter "до и после пакета" будет реализация пользовательского расширения.который реализует BeforeAllCallback и AfterAllCallback.Это расширение должно было бы отследить, было ли оно уже вызвано путем сохранения флага в root ExtensionContext Store (как BeforeAllCallback), чтобы оно выполнялось только один раз перед "люксом".Точно так же нужно будет подсчитать количество классов, для которых он выполняется, и отследить его в root Store.Это будет служить Stack или CountDownLatch.Как и AfterAllCallback, расширение должно уменьшать глобальный счетчик и только выполнить после завершения всех тестовых классов.

Очевидно, что вам нужно убедиться, что расширение вашего набора зарегистрировано.для каждого тестового класса, который принадлежит к комплекту.Возможно, специально скомпонованная аннотация упростит вам задачу.

Теперь, по общему признанию, я просто реализовал , что у меня в голове, но еще не кодировал такое расширение "suite".Так что, если вы на самом деле реализуете это, мне было бы интересно услышать о вашем опыте и, возможно, увидеть ваш код.; -)

Приветствия,

Сэм (основной коммиттер для JUnit 5)

...