Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 一个非常简单的例子中的Junit5 csv异常?_Java_Junit - Fatal编程技术网

Java 一个非常简单的例子中的Junit5 csv异常?

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

一个非常简单的代码,我无法理解这个错误。请帮帮我

“#”需要“\”吗?我试过了,但没用

或者,如果您有任何更有用的测试此“charTest”方法或代码,请告诉我

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