Как передать другую переменную в хук beforeEach в JUnit5 - PullRequest
0 голосов
/ 27 февраля 2019

У меня довольно длинная настройка для моих тестовых случаев, которая находится в хуке @beforeEach.

Проблема в том, что первый метод в хуке @beforeEach должен использовать другую переменную, в зависимости от того, какой тест выполняется, в противном случае мне придется продублировать весь тестовый класс, чтобы учесть изменение переменнойчто, конечно, не идеально.

Моя текущая настройка:

@beforeEach
@afterEach

@Test
@Test
@Test

По сути, все 3 теста требуют, чтобы в переменную beforeEach вводилась другая переменная.

Из того, что я прочитал, ParameterResolver может сработать, но то, что у меня есть, похоже, вызывает исключение, потому что я использую аннотацию @Test в другом месте класса (которую янужно):

public class ValidListParameterResolver implements ParameterResolver {

    private static List<String> LIST_OF_STRINGS_TO_USE = ImmutableList.of("a", "b");

    @Override
    public boolean supportsParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException {
        return true;
    }

    @Override
    public Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException {
        return LIST_OF_STRINGS_TO_USE.get(new Random().nextInt(LIST_OF_STRINGS_TO_USE.size()));
    }
}

Тогда в моем тестовом классе:

@BeforeEach
@ExtendWith(ValidListParameterResolver.class)
    void create(String file) throws IOException {

        Type name = method(file);
}

Кто-нибудь достиг этого раньше?

Большое спасибо за вашу помощь.

1 Ответ

0 голосов
/ 27 февраля 2019

Вот несколько советов, которые могут помочь вам выбрать правильный путь.

supportsParameter() должен никогда возвращать true в виде жестко запрограммированного значения.Скорее, ParameterResolver должен определить, должен ли он разрешать параметр - например, по типу или аннотации.

Расширения не могут быть зарегистрированы методом @BeforeEach (или любым другим методом жизненного цикла).Вам нужно будет зарегистрировать это в классе теста с помощью @ExtendWith.

Если вы хотите узнать, какой метод теста будет выполняться в методе @BeforeEach, добавьте параметр TestInfo testInfo в @BeforeEach список параметров метода.Затем вы можете получить доступ к тесту Method в TestInfo.

...