对于控制台输入和输出JUnit测试(JUnit test for console input and

2019-06-28 00:45发布

我只有一个方法为主。 如何检查的System.out.println(),并自动使用JUnit取代扫描仪输入值?

PS请提供一些解决方案...

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    int[] arr = new int[4];

    for (int i = 0; i < arr.length; i++) {
        arr[i] = scanner.nextInt();
    }

    for (int i = 0; i < arr.length; i++) {
        int res = 0;
        int k = 0;
        int num = arr[i];
        /*.....*/
        System.out.println(num);
    }
}

Answer 1:

理想情况下,提取尴尬的依赖关系,这样就可以不用这些测试。 更改main简单:

public static void main(String[] args) {
  doWork(new Scanner(System.in), System.out);
}

// TODO: Rename to something meaningful
public static void doWork(Scanner input, PrintStream output) {
  // Remainder of code
}

(考虑使用Writer代替PrintStream用于output 。)

然后,你并不真的需要进行单元测试main -但你可以测试doWork使用Scanner基于一个StringReader ,并输出基于一个StringWriter ,提供你想要的任何输入并检查输出。



文章来源: JUnit test for console input and output