Я хочу создать параметризованный тест, одной из переменных которого является функция (или то, что она должна возвращать).
Я создал класс ArgumentsProvider (мог бы сделать то же самое с MethodSource, но проблема та же).
Вот как это выглядит, когда 2-й параметр является жестко заданной строкой:
class UsersEventsControllerArgumentsProvider implements ArgumentsProvider {
@Override
public Stream<? extends Arguments> provideArguments(ExtensionContext context) {
return Stream.of(
arguments("/user/event/firstEvent", "EventIdFromConf_1"),
arguments("/user/event/secondEvent", "EventIdFromConf_2"),
arguments("/user/event/thirdEvent", "EventIdFromConf_3")
);
}
}
Однако я хочу, чтобы второй параметр был взят из класс @Configuration
, который у меня есть. (EventsConfiguration помечена @Configuration и имеет соответствующие методы получения)
Вот что я пытался сделать:
class UsersEventsControllerArgumentsProvider implements ArgumentsProvider {
@Override
public Stream<? extends Arguments> provideArguments(ExtensionContext context) {
return Stream.of(
arguments("/user/event/firstEvent", EventsConfiguration::getFirstEventId_1),
arguments("/user/event/secondEvent", EventsConfiguration::getFirstEventId_2),
arguments("/user/event/thirdEvent", EventsConfiguration::getFirstEventId_3)
);
}
}
Я получаю ошибку компиляции: Object is not a functional interface
Мой вопрос:
Есть ли способ передать функцию в параметризованный тест?
Или, может быть, есть другой способ сделать это? (Я не хочу иметь жестко запрограммированные переменные)