如何将列表作为JUnit5的参数化测试参数传递?

时间:2017-10-12 14:41:34

标签: java kotlin junit5 parameterized-unit-test

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

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

  

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

实际测试是:

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

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

2 个答案:

答案 0 :(得分:5)

没有理由按照StefanE的建议使用 hack

  

此时我非常确定Junit5测试参数除了基本类型之外不支持任何其他内容,而CsvSource只支持混合类型。

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

因此,您应该使用@CsvSource而不是@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")) ); }

@Override
public boolean navigateUpTo(Intent upIntent) {
    boolean result = super.navigateUpTo(upIntent);
    if (!result) {
        TaskStackBuilder.create(this)
            .addNextIntentWithParentStack(upIntent)
            .startActivities();
    }
    return result;
}

答案 1 :(得分:1)

将第三个元素作为逗号分隔的字符串提供,并将字符串拆分为您测试中的List。

此时我非常确定Junit5测试参数除了基本类型之外不支持任何其他内容,而CsvSource只支持混合类型。