我正在尝试为需要用户输入的方法创建一些JUnit测试。被测方法看起来类似于以下方法:
public static int testUserInput() { Scanner keyboard = new Scanner(System.in); System.out.println("Give a number between 1 and 10"); int input = keyboard.nextInt(); while (input < 1 || input > 10) { System.out.println("Wrong number, try again."); input = keyboard.nextInt(); } return input; }
有没有一种方法可以自动将程序传递给int而不是我或其他人在JUnit测试方法中手动执行此操作?像模拟用户输入一样?
提前致谢。
你可以通过调用System.setIn(InputStream in)来用自己的流替换System.in。InputStream可以是一个字节数组:
System.setIn(InputStream in)
System.in。InputStream
InputStream sysInBackup = System.in; // backup System.in to restore it later ByteArrayInputStream in = new ByteArrayInputStream("My string".getBytes()); System.setIn(in); // do your thing // optionally, reset System.in to its original System.setIn(sysInBackup);
通过将IN和OUT作为参数传递,不同的方法可以使此方法更具可测试性:
public static int testUserInput(InputStream in,PrintStream out) { Scanner keyboard = new Scanner(in); out.println("Give a number between 1 and 10"); int input = keyboard.nextInt(); while (input < 1 || input > 10) { out.println("Wrong number, try again."); input = keyboard.nextInt(); } return input; }