Как передать несколько параллельных потоков в Junit5 Parameterized test?

У меня есть два объекта ArrayList<> одинаковой длины, и мой параметризованный тест Junit5 имеет синтаксис:

@ParamterizedTest
@MethodSource("dummyfunction");
void functionName(String s1, String s2)
{
.....
.....
}


private Stream<Arguments> dummyfunction()
{
     ArrayList<String> arr1;
     ArrayList<String> arr2;
     .....
     .....
    return something;
}

Как я могу вернуть элементы из каждого ArrayList, чтобы один список предоставлял s1, а другой предоставлял s2 согласно функции functionName?

1 ответ

Решение

Наив раствор, который печатает

s1 = [1], s2 = [a]
s1 = [2], s2 = [b]
s1 = [3], s2 = [c]

со следующей реализацией

@ParameterizedTest
@MethodSource("dummyFunction")
void functionName(String s1, String s2) {
    System.out.println("s1 = [" + s1 + "], s2 = [" + s2 + "]");
}

static Stream<Arguments> dummyFunction() {
    List<String> list1 = List.of("1", "2", "3");
    List<String> list2 = List.of("a", "b", "c");

    Assertions.assertEquals(list1.size(), list2.size());

    List<Arguments> arguments = new ArrayList<>();
    for (int i = 0; i < list1.size(); i++) {
        arguments.add(Arguments.of(list1.get(i), list2.get(i)));
    }

    return arguments.stream();
}
Другие вопросы по тегам