基本上,我正在编写一个Java命令行应用程序,它通过readLine接受来自用户的参数。例如,如果用户按“1”,它将询问用户想要查看哪本书,用户可以按“1”或“2”的书号... ...因此,应用程序接受用户参数两次。而且我也在尝试使用TDD来测试应用程序。
这是问题所在。 如果我做这样的事情来模拟用户输入
System.setIn(new ByteArrayInputStream(PRESS_TWO.getBytes())); // set the first option
Program.main(new String[]{}); // run the program
System.setIn(new ByteArrayInputStream(PRESS_ONE.getBytes())); // set the second option
等待用户选择选项的第一步是正常的,但它将直接进入第二步而不等待第二个输入。如何在 JUnit 中模拟这个?
由于
这是我阅读输入的方式
try {
i1 = Integer.parseInt(reader.readLine());
}
catch (Exception e) {
System.out.println("Enter a valid integer!!");
}
if (i1 == 1) {
System.out.println(" 1. Book1 ");
System.out.println(" 2. eBook2 ");
System.out.println(" 3. Book3 ");
}
else if (i1 == 2) {
System.out.println(" Which one do you want?: ");
int i2 = 0;
try {
i2 = Integer.parseInt(reader.readLine());
}
catch (Exception e) {
// Do you know what numbers are!!!
System.out.println("Enter a valid integer!!");
}
}
答案 0 :(得分:0)
这取决于您的代码如何读取输入,但我认为一旦达到第一个ByteArrayInputStream
的末尾,您的代码就会看到文件结束并终止。尝试将两个流合并为一个(由换行符分隔)。