Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.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
JUnit不向Java主方法传递参数_Java_Unit Testing_Junit - Fatal编程技术网

JUnit不向Java主方法传递参数

JUnit不向Java主方法传递参数,java,unit-testing,junit,Java,Unit Testing,Junit,我试图测试我的main方法(它应该只接受一个参数)是否没有传递任何参数。我似乎无法理解我在这里缺少什么来实现这一点。我的程序的本质是从文件中读取输入,通过传递从文件读取的参数来创建对象,并显示输出 失败消息: org.junit.ComparisonFailure:应为:请传递一个参数 实际: 下面是我的单元测试: @Test public void givenNoParameter_shouldAskForOne() throws IOException { Strin

我试图测试我的main方法(它应该只接受一个参数)是否没有传递任何参数。我似乎无法理解我在这里缺少什么来实现这一点。我的程序的本质是从文件中读取输入,通过传递从文件读取的参数来创建对象,并显示输出

失败消息:

org.junit.ComparisonFailure:应为:请传递一个参数

实际:

下面是我的单元测试:

    @Test
    public void givenNoParameter_shouldAskForOne() throws IOException {
    String[] args = {};
    String output;

    try (ByteArrayOutputStream bOutput = new ByteArrayOutputStream()) {
        System.setOut(new PrintStream(bOutput));
        Main.main(args);
        bOutput.flush();
        output = bOutput.toString();
    }
    String newLine = System.getProperty("line.separator");
    String[] breakDownOutput = output.split(newLine);

    assertEquals(1, breakDownOutput.length);
    assertEquals("Please pass one argument", breakDownOutput[0]);
}
主要方法:

public static void main(String[] args) {

    if(args.length == 1) {
        DisplayOrder.setFilePath(args[0]);
        DisplayOrder.display();
    } else{
        System.err.println("Please pass one argument");
    }
}

我意识到我在我的main中使用了System.err.println()。将其更改为System.out.println()将其修复

没有显示您的main方法,我唯一的猜测是,您没有在main中向“System.out”写入任何内容,尤其是没有
System.out.println(“请传递一个参数”)执行的语句。
因此,对于“
breakDownOutput[0]
”中的非预期值,单元测试完全失败

您需要做的是确保
System.out.println(“请传递一个参数”)
另外,请检查您的类名
Main.Main(…)
,因为可能会导入其他
Main
类,这些类永远不会将您的期望值打印到
系统。out

显示
Main
方法代码请阅读“如何创建”。然后使用链接改进您的问题(不要通过评论添加更多信息)。否则,我们无法回答您的问题,也无法帮助您。请记录在案:像这样测试系统真的是个坏主意。例如,您更希望编写返回字符串的代码,或者只需传入要写入的输出流即可。在某些特殊情况下,如编写用于CodinGame(或等效编码平台)练习的测试工具,测试
System.out
是唯一的方法。对不起,各位。我已经编辑了我的问题并添加了main方法;被执行。但我在这里尝试的是找出如何在这个测试中不传递任何参数。