JUnit 5: доступ к индексу внутри ParameterizedTest - PullRequest
2 голосов
/ 17 июня 2020

Рассмотрим этот фрагмент:

@ParameterizedTest
@ValueSource(strings = {"a", "b", "c"})
void test(final String line) {
    // code here
}

Это будет реальный тест, но для простоты предположим, что его цель - только напечатать это:

Line 1: processed "a" successfully.
Line 2: processed "b" successfully.
Line 3: failed to process "c".

Другими словами, я хочу индекс доступных тестовых значений внутри теста. Из того, что я нашел, {index} можно использовать вне теста, чтобы назвать его правильно.

1 Ответ

3 голосов
/ 17 июня 2020

Я не уверен, поддерживает ли это JUnit 5 в настоящее время. Обходной путь может заключаться в использовании @MethodSource и предоставлении List<Argument> в соответствии с вашими потребностями.

public class MyTest {

  @ParameterizedTest
  @MethodSource("methodSource")
  void test(final String input, final Integer index) {
    System.out.println(input + " " + index);
  }

  static Stream<Arguments> methodSource() {
    List<String> params = List.of("a", "b", "c");

    return IntStream.range(0, params.size())
      .mapToObj(index -> Arguments.arguments(params.get(index), index));
  }
}
...