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