控制台输入和输出的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
– 但你可以使用基于StringReader
的Scanner
测试doWork
,并根据StringWriter
输出,提供你想要的任何输入并检查输出。