有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

单元测试JUnit不向Java主方法传递参数

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

Failure Message:

org.junit.ComparisonFailure: Expected :Please pass one argument

Actual :

下面是我的单元测试:

    @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");
    }
}

我意识到我在使用这个系统。犯错误println()在我的main中。将其更改为系统。出来println()修复了它


共 (1) 个答案

  1. # 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