Java 一个非常简单的例子中的Junit5 csv异常?
一个非常简单的代码,我无法理解这个错误。请帮帮我强> “#”需要“\”吗?我试过了,但没用 或者,如果您有任何更有用的测试此“charTest”方法或代码,请告诉我Java 一个非常简单的例子中的Junit5 csv异常?,java,junit,Java,Junit,一个非常简单的代码,我无法理解这个错误。请帮帮我 “#”需要“\”吗?我试过了,但没用 或者,如果您有任何更有用的测试此“charTest”方法或代码,请告诉我 public class Stringtest { String charTest(char first,char second){ System.out.println("first = " + first); System.out.println("second = " + second); String r
public class Stringtest {
String charTest(char first,char second){
System.out.println("first = " + first);
System.out.println("second = " + second);
String res="";
if(first=='#'||first=='*'){
if(isNumbers(second)){
res+="FILE_CHANGE";
return res;
}
}
res+="N";
if(!isNumbers(second)){
res+="M";
}
return res;
}
boolean isNumbers(char chars){
return Character.getNumericValue(chars)<=57 && Character.getNumericValue(chars)>=48;
}
@CsvSource(value = {
"*1",
"#0", // #0 throws org.junit.platform.commons.PreconditionViolationException: Line at index 1 contains invalid CSV: "#0"
"*w",
"#?", // why # can't be the firstchar?
"A1",
"cc"
})
@ParameterizedTest(name = "nums {index}==>firstchar:{0},sencondchar:{1}")
void test1(ArgumentsAccessor accessor){
System.out.println(charTest(accessor.getString(0).charAt(0),accessor.getString(0).charAt(1)));
}
如果查看
CsvSource
和value()
参数的文档,您将看到#
被解释为注释:
任何以#符号开头的行都将被解释为注释,并将被忽略
这就解释了为什么您没有得到预期的结果——尽管抛出一个错误与“将被忽略”不同——所以可能也有一个bug
如果可以,我建议您完全避免使用#
。当然,这可能不是一个选项,这取决于您正在处理的约束
否则,您可能会通过以下方法获得更好的成功:
import org.junit.jupiter.params.provider.ValueSource;
...
@ParameterizedTest
@ValueSource(strings = {"11", "#2", "33"})
public void test2(String input) {
System.out.println(charTest(input.charAt(0), input.charAt(1)));
}
这将按预期处理前导的#
s:
first = #
second = 2
first = #
second = 2