如何解决Java JUnit:测试用户输入将标准输入传递给 Scanner
问题:我正在尝试用 Java 测试一个需要用户输入的简单程序,但是虽然我能够将输入提供给测试,但我只能在第一个调用的方法中这样做。抛出的错误是 java.util.NoSuchElementException: No line found
设置:第一种方法要求用户输入命令,然后根据命令,该方法将调用其他也要求用户输入的方法。这就是问题出现的地方。
测试方法:
public abstract class InputHandler {
// Scanner for commands,login message and instructions
public static void start() {
String fullCommand;
String actionCommand;
String commandId;
Scanner scanner = new Scanner(System.in);
// Command loop: asks for valid input and assigns id to variable if necessary
while(true) {
System.out.println("\nEnter command:");
actionCommand = scanner.nextLine().toLowerCase();
//logic to handle different length commands
}
switch (actionCommand) {
case "new lead":
newLead();
break;
case "show leads":
showLeads();
break;
case "quit":
try {
System.out.println("Goodbye!");
Thread.sleep(1000);
System.exit(0);
}catch (InterruptedException e) {
e.printStackTrace();
}
default:
System.out.println("Please enter a valid command");
}
}
}
JUnit 测试:
@Test
void startTest() {
System.setIn(new ByteArrayInputStream("new lead\nGustavo Perez\n555555555\nhola@gus.io\nKurts".getBytes()));
InputHandler.start();
assertTrue(!DatabaseManager.getLeads().isEmpty());
}
问题再次出现在调用方法时的测试中,在方法 start() 调用 newLead() 之后,它将“new Lead”作为标准输入(字节数组中的第一个字符串)传递给 Scanner它不再继续传递字节数组中的值。
感谢您的帮助!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。