JUnit 5 до аннотации TestFactory

Я написал динамический тест @TestFactory в JUnit5, теперь я вижу, что не могу выполнить @Before для динамического теста, ссылаясь на Руководство пользователя JUnit 5 — Написание тестовых аннотаций.

Есть ли обходной путь для выполнения @Before или подобного перед TestFactory?

Метод, который я хочу добавить в @Before, так как это всего лишь инициализация:

public static void initialize() throws Exception{
    buildTest = new XQueryTestHelper();
    buildTest.initialization();
    
    listTestSuiteIdentifier = buildTest.getListTestsuiteIdentifier();
    arrayHdrInbPayTestcases = buildTest.getHdrInbPayTestcases();
    arrayHeaderAndBodyTestcases = buildTest.getHeaderAndBodyTestcases();
    listHeaderAndBodyTestSuites = buildTest.getHeaderAndBodyTestSuites();
    listHdrInbPayTestSuites = buildTest.getHdrInbPayTestsuites();
    
}

Решение:

Использование @BeforeAll / @AfterAll возможно в динамическом тесте. Ссылаясь на улучшение документации жизненного цикла DynamicTest

Динамический жизненный цикл тестирования

Жизненный цикл выполнения динамического теста сильно отличается от стандартного случая @Test. В частности, для динамических тестов нет никаких обратных вызовов жизненного цикла. Это означает, что методы @BeforeEach и @AfterEach и соответствующие им обратные вызовы расширений не выполняются для динамических тестов. Другими словами, если вы получаете доступ к полям из тестового экземпляра в лямбда-выражении для динамического теста, эти поля не будут сбрасываться методами обратного вызова или расширениями между выполнением динамических тестов, сгенерированных одним и тем же методом @TestFactory.


person Hendrik    schedule 30.03.2017    source источник
comment
Вы должны использовать свое решение, чтобы ответить на свой вопрос. (Да, это возможно и совершенно нормально.) Вы также можете указать на #378, что, вероятно, изменит интеграцию динамических тестов в жизненный цикл.   -  person Nicolai Parlog    schedule 30.03.2017


Ответы (2)


Использование @BeforeAll / @AfterAll возможно в динамическом тесте. Ссылаясь на улучшение документации жизненного цикла DynamicTest

Динамический жизненный цикл тестирования

Жизненный цикл выполнения динамического теста сильно отличается от стандартного случая @Test. В частности, для динамических тестов нет никаких обратных вызовов жизненного цикла. Это означает, что методы @BeforeEach и @AfterEach и соответствующие им обратные вызовы расширений не выполняются для динамических тестов. Другими словами, если вы получаете доступ к полям из экземпляра теста в лямбда-выражении для динамического теста, эти поля не будут сбрасываться методами обратного вызова или расширениями между выполнением динамических тестов, созданных одним и тем же методом @TestFactory.

person Hendrik    schedule 30.03.2017

Использование @BeforeAll или @AfterAll нет (пока) возможно в динамическом тесте.

Предпринимаются попытки реализовать это, но похоже, что разработчики еще не решили, как это будет сделано.

Я для себя решил пока вручную вызывать мой метод настройки, что довольно некрасиво.

person Jörn Schellhaas    schedule 26.08.2019