Java,Junit - 捕获标准输入/输出以用于单元测试

标签 java junit integration-testing io

我正在使用 JUnit 编写集成测试来自动化基于控制台的应用程序的测试。该应用程序是家庭作业,但这部分不是家庭作业。我想自动化这些测试以提高效率——我不想返回并重新测试应用程序中已经测试过的部分。 (使用单元测试的标准原因)

无论如何,我无法弄清楚或找到有关捕获输出的文章,以便我可以对其进行 assertEquals 也不提供自动输入。我不在乎输出/输入是否进入控制台/输出 Pane 。我只需要执行测试并验证输出是给定输入的预期结果。

任何人都有文章或代码来帮助解决这个问题。

最佳答案

使用 System.setOut() (和 System.setErr())将输出重定向到任意打印流 - 可以是您以编程方式读取的打印流。

例如:

final ByteArrayOutputStream myOut = new ByteArrayOutputStream();
System.setOut(new PrintStream(myOut));

// test stuff here...

final String standardOutput = myOut.toString();

关于Java,Junit - 捕获标准输入/输出以用于单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2169330/

相关文章:

java - dataTable排序问题(JSF2.0 + primefaces)

java - 如何让滚动条从底部开始?

unit-testing - 莫基托。捕获对 LocalDateTime.now() 的调用;

java - 使用自定义值验证 map

java - Spring Boot Soap 集成测试失败

javascript - 如何为 <noscript> 标签编写自动化测试?

java - GraphQL-Java 将 HTTP header 发送到 REST 端点

grails - 如何防止服务的元类被覆盖

python - 使用参数化测试或单独测试的测试工作流程

java - 无法从Kafka获取数据到分布式表