Java 具有模拟用户输入的JUnit测试
我正在尝试为需要用户输入的方法创建一些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
可以是一个字节数组:
InputStream sysInBackup = System.in; // backup System.in to restore it laterByteArrayInputStream 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;
}
以上是 Java 具有模拟用户输入的JUnit测试 的全部内容, 来源链接: utcz.com/qa/420071.html