单元测试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 楼答案
没有显示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