Standard-In からのデータを処理する必要があるプログラムがあります。のようにコマンドラインで呼び出すことができますjava program < input
。main() の適切な単体テストを書きたいと思います。メソッドの System.in を他のストリームと再関連付けすることは可能ですか?
テストでは、サンプル データを読み取り、(サンプル データから) 定義したストリームに stdin を接続して元のプログラムを何らかの方法で実行し、期待どおりの結果が返されることを確認します。これらのクラスの使用を検討しました:
PipedInputStreamおよび
PipedOutputStream。しかし、テストするたびに PipedInputStream から読み取るように元のプログラムを変更する必要があります。または、ストリーム読み取りを関数 (例: parseStream(InputStream)
) に分離し、既にサンプル データに接続されている PipedInputStream を渡すことができます。
必要なものを標準入力にパイプするシェルスクリプトを作成することもできますが、問題のメソッドは一連の処理ステップの一部になるため、それ自体を標準出力に書き込むべきではなく、実際に ArrayList<SomeCompositeType> を返します。SomeCompositeType には、構造化された方法で読み取られたデータが含まれます (例: 一部の int、配列、マップなど)。
別のストリームで System.in から読み取るメソッドを呼び出すことは可能ですか?