在Junit测试中模拟控制台输入输出
最近的一次软件构造实验中包含控制台交互的代码,在这部分代码的测试过程中遇到了问题:如何在Junit测试中模拟控制台输入,并且检测输出到控制台的内容是否正确呢?通过查阅资料,问题得以解决。下面就来介绍一下在Junit测试中模拟控制台输入和输出的方法。
Java标准输入输出流
首先来了解java的标准输入输出流。java.lang.System中有in(键盘输入流),out(显示器输出流),err(标准错误流)三个标准数据流:
public static final InputStream in = null;
public static final PrintStream out = null;
public static final PrintStream err = null;
其中System类不能创建对象,只能直接使用它的三个静态成员;当main方法执行时自动创建上面三个对象。
我们在控制台交互的时候使用的就是in和out这两个标准数据流,比如下面的代码:
public class TestIO{
public static void main(String[] args) {
int a;
try {
System.out.println("Input:");
while ((a = System.in.read()) != -1) {
System.out.print((char) a);
}
} catch (IOException e) {
System.out.