java - 来自 System.in 的 Java UnitTest 多命令行输入
问题描述
我正在尝试测试一个永远循环直到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
字符串中读取?
解决方案
Scanner
您在每次迭代中创建一个新的并且每次nextLine()
只访问一次。
尝试从循环中提取它:
Scanner scanner = new Scanner(in);
scanner.useDelimiter("\r\n");
String userCmd = "";
while (!userCmd.equals("QUIT")) {
userCmd = scanner.nextLine();
...
推荐阅读
- javascript - javascript - 在对象数组中搜索字符串
- java - Spark groupBy 问题
- bash - 带有值的 Docker 命令行参数,何时使用空格与何时使用等号
- bash - lynx - 将 URL 列表转储到单个文件中?
- laravel - 将对象保存到会话或 cookie 中
- python - 在 keras 中创建神经网络以将两个输入整数相乘
- javascript - 计算 Ajax 请求中返回的对象数
- typescript - Angular5 在项目中导入 RxJS 时出错
- php - 使用 $_GET 中的多个变量来更改页面布局和 Mysql 结果
- swift - Swift:类型符合 Equatable 的泛型数组