我想使用三个参数来参数化我的JUnit5测试:string
,string
和list<string>
。
使用@CsvSource
时到目前为止没有运气,这是为我的用例传递params最方便的方法:
没有隐式转换将java.lang.String类型的对象转换为 输入java.util.List
实际测试是:
@ParameterizedTest()
@CsvSource(
"2,1"
)
fun shouldGetDataBit(first: Int, second: String, third: List<String>) {
...
}
知道这是否可行?我在这里使用Kotlin,但它应该是无关紧要的。
答案 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只支持混合类型。