8

我想使用三个参数参数化我的 JUnit5 测试stringstringlist<string>

到目前为止,使用时没有运气@CsvSource,这是为我的用例传递参数的最方便的方法:

没有将 java.lang.String 类型的对象转换为 java.util.List 类型的隐式转换

实际测试是:

@ParameterizedTest()
@CsvSource(
  "2,1"
 )
fun shouldGetDataBit(first: Int, second: String, third: List<String>) {
    ...
}

知道这是否可能吗?我在这里使用 Kotlin,但它应该是无关紧要的。

4

2 回答 2

24

没有理由使用StefanE 建议的 hack

在这一点上,我很确定 Junit5 测试参数不支持除了原始类型和 CsvSource 之外的任何其他类型,只允许混合类型。

实际上,JUnit Jupiter 支持任何类型的参数。只是@CsvSource仅限于少数原始类型和String.

因此@CsvSource,您应该使用 a而不是使用 a ,@MethodSource如下所示。

@ParameterizedTest
@MethodSource("generateData")
void shouldGetDataBit(int first, String second, List<String> third) {
    System.out.println(first);
    System.out.println(second);
    System.out.println(third);
}

static Stream<Arguments> generateData() {
    return Stream.of(
        Arguments.of(1, "foo", Arrays.asList("a", "b", "c")),
        Arguments.of(2, "bar", Arrays.asList("x", "y", "z"))
    );
}
于 2017-10-13T13:58:21.923 回答
2

Provide the third element as a comma separated string and the split the string into a List inside you test.

At this point I'm pretty sure Junit5 Test Parameters does not support anything else than primitive types and CsvSource only one allowing mixing of the types.

于 2017-10-12T14:57:49.997 回答