如何在 Maven 测试中从 stdin 读取内容?

问题描述 投票:0回答:1

我想从标准输入中读取数据作为我的 Java 项目测试的一部分,该项目使用 Maven 作为其构建工具。

我的Java代码是这样的(出于演示目的而简化):

try (Scanner stdin = new Scanner(System.in)) {
  stdin.nextLine();
}

我正在正常运行测试,即

mvn test
。当我在终端中运行该命令时,我输入的任何行都不会被我的代码读取,并且测试将永远挂起。

java maven testing input stdin
1个回答
0
投票

您的问题是 Maven Surefire 插件派生了额外的 JVM 来运行实际测试,并且您的输入不会发送到该 JVM。如果输入被发送到测试 JVM,则并行测试将不再可能。

更新您想要进行单元测试的代码可能比配置 Maven 测试基础设施来支持 stdin 更容易。

另请注意,“用户输入”(例如从标准输入读取)将测试限定为集成测试(因为它结合了系统的两个部分)。

如果您想对此进行测试,请将其分为自动部分(无需读取标准输入即可工作的真正单元测试)和手动测试,在手动测试中运行软件,根据测试协议输入数据,并记下结果是否为满足对给定输入也记录的期望。

© www.soinside.com 2019 - 2024. All rights reserved.