由于数组没有隐式转换,您可以使用显式转换,首先您需要声明您的转换器类:
class IntArrayConverter implements ArgumentConverter {
@Override
public Object convert(Object source, ParameterContext context)
throws ArgumentConversionException {
if (!(source instanceof String)) {
throw new IllegalArgumentException(
"The argument should be a string: " + source);
}
try {
return Arrays.stream(((String) source).split(",")).mapToInt(Integer::parseInt).toArray();
} catch (Exception e) {
e.printStackTrace();
throw new IllegalArgumentException("Failed to convert", e);
}
}
}
然后你可以在你的测试中使用它:
@ParameterizedTest
@CsvSource(value = {
"13,14,65,456,31,83;1331,65456",
"1,2,3,4,5,6;10,20"}, delimiterString = ";")
public void palindromeCombos(@ConvertWith(IntArrayConverter.class) int[] input,
@ConvertWith(IntArrayConverter.class) int[] expected) {
System.out.println(Arrays.toString(input));
System.out.println(Arrays.toString(expected));
}
请注意,我[]
从 CsvSource 中删除了 并将分隔符更改为;
,因此数组由以逗号分隔的整数列表表示。如果你愿意,你可以保留你拥有的格式并在转换器类中处理它。对于这两个示例,输出为:
[13, 14, 65, 456, 31, 83]
[1331, 65456]
[1, 2, 3, 4, 5, 6]
[10, 20]
如果您需要更多信息,可以查看此帖子:https ://www.baeldung.com/parameterized-tests-junit-5