来自System.in的Java UnitTest多命令行输入

时间:2020-10-07 23:46:38

标签: java unit-testing junit

我正在尝试测试一个永久循环直到输入QUIT的函数,但是我不知道如何模拟来自系统的多行用户输入。

这是我目前拥有的

String validStartFlow = "START-FLOW\r\nQUIT\r\n";
ByteArrayInputStream in = new ByteArrayInputStream(validStartFlow.getBytes());
System.setIn(in);
CommandLineListener cmdLineListener = new CommandLineListener(eventBus,logger);
cmdLineListener.startCommandLineListener(in);

永远循环的方法是

while (!userCmd.equals("QUIT")) {
    userCmd = "";
    Scanner scanner = new Scanner(in);
    // BufferedReader reader = new BufferedReader(in);

    while (userCmd == null || userCmd.equals("")) {
        userCmd = scanner.nextLine();
    }

    ...
}

START-FLOW 的读入很完美,但随后到达scanner.nextLine()时,它崩溃并显示以下错误

找不到行java.util.NoSuchElementException:找不到行

如何从QUIT字符串中读取validStartFlow

1 个答案:

答案 0 :(得分:2)

您可以在每次迭代中创建一个新的Scanner,并且每次只能访问一次nextLine()

尝试从循环中提取它:

Scanner scanner = new Scanner(in);
scanner.useDelimiter("\r\n");
String userCmd = "";

while (!userCmd.equals("QUIT")) {
        userCmd = scanner.nextLine();
...