使用 JUnit 测试需要使用输入流模拟键盘输入的主要方法?

zxg*_*ear 3 java junit input

假设我有一个带有 main 方法的程序,该方法使用java.util.Scanner该类来接收用户输入。

import java.util.Scanner;

public class Main {
    static int fooValue = 0;

    public static void main(String[] args) {
        System.out.println("Please enter a valid integer value.");
        fooValue = new Scanner(System.in).nextInt();
        System.out.println(fooValue + 5);
    }
}
Run Code Online (Sandbox Code Playgroud)

这个程序所做的就是接收一个整数输入,并输出一个整数加 5。这意味着我可以想出一个这样的表:

+-------+-----------------+
| Input | Expected output |
+-------+-----------------+
|     2 |               7 |
|     3 |               8 |
|     5 |              12 |
|     7 |              13 |
|    11 |              16 |
+-------+-----------------+
Run Code Online (Sandbox Code Playgroud)

我需要对这组输入数据进行 JUnit 测试。处理这样的问题最简单的方法是什么?

小智 6

您可以像这样重定向 System.out、System.in 和 System.err:

System.setOut(new PrintStream(new FileOutputStream("output")));

System.setErr(new PrintStream(new FileOutputStream("error")));

System.setIn(new FileInputStream("input"));
Run Code Online (Sandbox Code Playgroud)

因此,在您的单元测试中,您可以设置此重定向并运行您的类。