控制台输入和输出的JUnit测试

我只有一个方法主要。 如何检查System.out.println()并使用JUnit替换Scanner自动输入值?

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); } } 

理想情况下,提取尴尬的依赖项,以便您可以在没有它们的情况下进行测试。 将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 。)

然后你真的不需要unit testingmain – 但你可以使用基于StringReaderScanner测试doWork ,并根据StringWriter输出,提供你想要的任何输入并检查输出。