java - 将任意流连接到标准输入

标签 java unit-testing stream pipe

我有一个程序需要处理来自 Standard-In 的数据。我可以像这样在命令行上调用它 java program < input 。我想为其 main() 编写一个适当的单元测试。是否可以将方法的 System.in 与其他流重新关联?

在测试中,我可以读取示例数据,然后以某种方式运行原始程序,并将其标准输入连接到我定义的某个流(来自示例数据),并验证它是否返回我期望的内容。我考虑过使用这些类: PipedInputStreamPipedOutputStream 。但这需要我每次测试时都修改原始程序以从 PipedInputStream 读取。或者,我可以将流读取隔离到函数中(例如 parseStream(InputStream) )并传递已连接到示例数据的 PipedInputStream。

我还可以编写一个 shell 脚本来将我想要的任何内容通过管道传输到其标准输入中,但是所讨论的方法将是一系列处理步骤的一部分,因此它本身不应该写入标准输出并实际上返回 ArrayList 。其中 SomeCompositeType 包含以结构化方式读取的数据(例如一些整数、数组、映射等)

那么是否可以调用一些使用不同流从 System.in 读取的方法?

最佳答案

参见my comment .

您似乎想要的内容由 System.setIn 提供:-)

关于java - 将任意流连接到标准输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12031048/

相关文章:

Java 8 Stream - 为什么过滤器方法不执行?

c# - StreamReader ReadLine 正在修改/不释放 Stream

java - Java 中的撤消功能

java - 使用 Karaf 的 features-maven-plugin maven 插件需要帮助... osgi

java - Mockito:@Mock 对象何时初始化以及它调用哪个构造函数

javascript - 如何在 Jasmine 测试中模拟特定日期

java - 使用 RTP 在 JMF 中实现播放器

java gson - 检查 JsonElement 是字符串还是 JsonObject

java - 检索包含嵌入对象的网页

unit-testing - Maven EAR 模块和 EJB 依赖项测试