Junit5 Ошибка. Вы должны предоставить хотя бы один аргумент для этого @ParameterizedTest - PullRequest
0 голосов
/ 27 августа 2018

Я пытаюсь разработать параметризованный тест в JUnit 5, как в примере ниже.

@ParameterizedTest
@ArgumentsSource(ArgClassProvider.class)
void testAction_shouldSmth(ArgClass argClass) {
   //...
}


class ArgClassProvider implements ArgumentsProvider {

    @Override
    public Stream<? extends Arguments> provideArguments(ExtensionContext extensionContext) throws Exception {
        return Stream.of(new ArgClass(), new ArgClass()).map(Arguments::of);
    }
}

Попытка запустить тест вызывает исключение:

java.lang.NoSuchMethodException: com.ots.platform_sl.service.config.service.EarnMilesServiceTestHotels$ArgClassProvider.<init>()
...
org.junit.platform.commons.util.PreconditionViolationException: Configuration error: You must provide at least one argument for this @ParameterizedTest
...

Вы должны предоставить хотя бы один аргумент для этого @ ParameterizedTest

Это сообщение заставляет меня чувствовать, что я делаю что-то не так, не так ли?

р. s. У меня есть предположение, что доступны только арги примитивных типов.

1 Ответ

0 голосов
/ 27 августа 2018

TL; DR

Сделать ArgClassProvider статическим или классом верхнего уровня.

Длинная версия

. Внимательно посмотрите на сообщение об ошибке:

java.lang.NoSuchMethodException:
com.ots.platform_sl.service.config.service.EarnMilesServiceTestHotels$ArgClassProvider.<init>()

Здесь вы можете видеть, что Юпитер не может найти конструктор без параметров для ArgClassProvider. Причина в том, что это нестатический внутренний класс , что означает, что его неявный конструктор принимает в качестве аргумента экземпляр внешнего класса (в данном случае EarnMilesServiceTestHotels).

Чтобы дать вашей ArgumentsProvider реализации конструктор без параметров, необходимый для , у вас есть две опции:

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