Java 将任意流连接到标准输入

Java 将任意流连接到标准输入,java,unit-testing,stream,pipe,Java,Unit Testing,Stream,Pipe,我有一个程序,需要处理标准中的数据。我可以在命令行上调用它,比如sojava程序和系统中。您应该重构代码,以便可以将不同的流传递给它进行读写。

我有一个程序,需要处理标准中的数据。我可以在命令行上调用它,比如so
java程序
。我想为它的main()编写一个适当的单元测试。是否可以将方法的System.in与其他流重新关联

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

我也可以编写一个shell脚本,将我想要的任何东西通过管道传输到它的stdin中,但是这个方法是一系列处理步骤的一部分,所以它本身不应该写入stdout,而是实际返回ArrayList。其中SomeCompositeType包含以结构化方式读取的数据(例如,一些整数、数组、映射等)

因此,是否可以使用不同的流调用从System.in读取的方法?

请参阅


您所需要的是:(-)

也许您应该考虑将流作为参数来读取。+ 1为@ IGAACIOVAZKZ Abras的方法:您不应该改变<代码>系统。在< /代码>和<代码>系统中。您应该重构代码,以便可以将不同的流传递给它进行读写。