我有一个程序需要处理来自Standard In的数据。我可以在命令行上调用它,就像java program < input
一样。我想为它的main()编写一个合适的单元测试。是否可以将方法的System.in与其他流重新关联?
在测试中,我可以读取样本数据,然后以某种方式运行原始程序,使其stdin连接到我定义的某个流(来自样本数据),并验证它是否返回了我期望的结果。我考虑过使用这些类:PipedInputStream和PipedOutputStream。但每次测试时,我都需要修改原始程序以从PipedInputStream中读取。或者,我可以将流读取隔离到一个函数(例如parseStream(InputStream)
)中,并传递一个已经连接到样本数据的PipedInputStream。
我也可以编写一个shell脚本,将我想要的任何内容管道传输到它的stdin中,但有问题的方法将是一系列处理步骤的一部分,因此它本身不应该写入stdout,并实际返回ArrayList<SomeCompositeType>。其中SomeCompositeType包含以结构化方式读取的数据(例如,一些int、数组、映射等)
那么,是否可以用不同的流调用从System.in读取的某个方法呢?
请参阅我的评论。
您似乎想要的是由System.setIn
提供的:-)