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

}

以上是 Java 具有模拟用户输入的JUnit测试 的全部内容, 来源链接: utcz.com/qa/420071.html

回到顶部