捕获控制台显示(输入和输出)

时间:2016-01-05 21:25:30

标签: java junit io console

我正在为Java中的基于控制台的应用程序设置一些测试用例。以下是我的代码:

ByteArrayInputStream in = new ByteArrayInputStream("input 1\ninput 2".getBytes());
System.setIn(in); //feeds inputs

ByteArrayOutputStream out = new ByteArrayOutputStream();
System.setOut(new PrintStream(out)); //captures output

TestProgram.test();

String output = out.toString();
System.setOut(new PrintStream(new FileOutputStream(FileDescriptor.out)));
System.out.println(output);

应用程序在控制台和用户之间来回简单 - 控制台提出问题,用户给出答案。因此,例如,根据上面的输入,控制台在交互结束时可能看起来如下所示:

Please enter a color: input 1
Please enter your name: input 2

...其中input 1input 2是用户的输入,提示是从print的{​​{1}}命令发出的。

我想捕捉控制台在交互结束时的样子(即输入和输出一起),但似乎我只能独立捕获输入和输出。如何从上面修改我的代码以捕获生成的控制台显示,输入和输出适当地编织在一起?

1 个答案:

答案 0 :(得分:0)

您可以在数组中记录inputoutput并将它们推送到一起。

我不理解 100%,但您可以将它们存储在数组中。

String[] s = (out.toString() + in.toString()).split("\n");
for(String a : s) System.out.println(a);

希望有所帮助