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

假设我有一个带有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); } } 

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

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

我需要为这组输入数据进行JUnit测试。 接近这样的问题最容易的是什么?

您可以像这样重定向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")); 

因此,在unit testing中,您可以设置此重定向并运行您的类。

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