使用JUnit测试需要用输入流模拟键盘输入的主要方法?[英] Using JUnit to test a main method that requires simulation of keyboard input with an input stream?

问题描述

让我们假设我有一个带有主要方法的程序,该程序使用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);
    }
}

所有这些程序都可以接收一个整数输入,并输出一个整数加5.这意味着我能够提出这样的表:

+-------+-----------------+
| Input | Expected output |
+-------+-----------------+
|     2 |               7 |
|     3 |               8 |
|     5 |              12 |
|     7 |              13 |
|    11 |              16 |
+-------+-----------------+

我需要为这组输入数据进行JUNIT测试.解决这样的问题的最简单是什么?

推荐答案

您可以重定向系统.

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

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

System.setIn(new FileInputStream("input"));

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

其他推荐答案

系统规则库为此类测试提供JUNIT规则.另外,您应该使用参数化测试.

本文地址:https://www.itbaoku.cn/post/978462.html