我有一个需要处理Standard-In数据的程序。我可以在命令行上调用它,如java program < input
。我想为它的main()编写一个合适的单元测试。是否可以将方法的System.in与其他流重新关联?
在测试中,我可以读取示例数据,然后以某种方式运行原始程序,其stdin连接到我定义的一些流(从示例数据)并验证它返回我期望的。我考虑过使用这些类:
PipedInputStream和
PipedOutputStream。但是每次我测试它时都需要我修改原始程序以从PipedInputStream中读取。或者我可以将流读取隔离到一个函数(例如parseStream(InputStream)
)并传递已连接到样本数据的PipedInputStream。
我还可以编写一个shell脚本来管道我想要的任何东西到stdin,但是这个方法将是一系列处理步骤的一部分,因此它本身不应该写入stdout并实际返回ArrayList&lt; SomeCompositeType&gt; 。 SomeCompositeType包含以结构化方式读取的数据(例如,一些整数,数组,地图等)。
那么可以调用一些从System.in读取不同流的方法吗?