我正在尝试测试我的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()可修复该问题。
答案 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