Javaでプログラミングコンテスト用のコードを書いています。プログラムへの入力は stdin を使用して与えられ、出力は stdout にあります。標準入力/標準出力で動作するプログラムをどのようにテストしていますか? これは私が考えていることです:
System.in は InputStream 型で、System.out は PrintStream 型であるため、次のプロトタイプを使用して func にコードを記述しました。
void printAverage(InputStream in, PrintStream out)
ここで、junit を使用してこれをテストしたいと思います。String を使用して System.in を偽造し、String で出力を受け取りたいと思います。
@Test
void testPrintAverage() {
String input="10 20 30";
String expectedOutput="20";
InputStream in = getInputStreamFromString(input);
PrintStream out = getPrintStreamForString();
printAverage(in, out);
assertEquals(expectedOutput, out.toString());
}
getInputStreamFromString() と getPrintStreamForString() を実装する「正しい」方法は何ですか?
これを必要以上に複雑にしていますか?