JUnit不向主方法Java传递参数

时间:2019-03-12 14:00:07

标签: java unit-testing junit

我正在尝试测试我的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");
    }
}

我已经意识到我在主系统中使用了System.err.println()。将其更改为System.out.println()可修复该问题。

1 个答案:

答案 0 :(得分:1)

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

您要做的是,如果没有为您的main提供任何参数,则确保执行System.out.println("Please pass one argument");。 另外,请检查您的类名Main.main(...),因为可能还会导入其他Main类,这些类将永远不会将您的期望值打印到System.out