Java 为什么这个JUnit测试失败了?

Java 为什么这个JUnit测试失败了?,java,picocli,Java,Picocli,测试无法正确运行尝试运行JUnit测试时出错 package picocli; import picocli.CommandLine.Option; public class ComparatorRunnerConfig { @Option(names = {"-rc", "--report-class"}, required = false, description = "define report") private String r

测试无法正确运行尝试运行JUnit测试时出错

package picocli;

import picocli.CommandLine.Option;

public class ComparatorRunnerConfig {

      @Option(names = {"-rc", "--report-class"}, required = false,
              description = "define report")
      private String report;

      public String getReport() {
            return report;
      }
}
我的JUnit测试:

package picocli;

import static org.junit.Assert.*;
import org.junit.Test;

public class ConfigurationTest {

    @Test
    public void testBasicConfigOptions() {
        String args = "-rc BlahBlah";
        ComparatorRunnerConfig mfc = new ComparatorRunnerConfig();
        new CommandLine(mfc).parse(args);

        String myTestValue = mfc.getReport();
        assertEquals(myTestValue, "BlahBlah");
    }
}

测试失败。

问题在于测试有一个微妙的错误:目的是传递两个参数:选项
“-rc”
及其选项参数
“BlahBlah”
,但测试实际做的是传递一个带有嵌入空格的参数
“-rc BlahBlah”

Picocli将无法匹配此输入,并将抛出异常(可能错误消息会显示“未知选项-rc BlahBlah”,但我现在不在电脑旁,因此无法验证)

解决方案是将测试更改为:

String[] args = "-rc BlahBlah".split(" ");
或者这个:

String[] args = new String[] {"-rc", "BlahBlah"};
测试中的这个bug实际上是一个相当常见的错误,我自己也犯过几次这个错误。:-)


附带说明:通过设置系统属性
-Dpicocli.trace=DEBUG
,您可以使用picocli帮助解决此类问题

@RemkoPopma噢!谢谢你指出这一点。@Neil mc feely这回答了你的问题吗?