12

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() を実装する「正しい」方法は何ですか?

これを必要以上に複雑にしていますか?

4

3 に答える 3

7

次のことを試してください。

String string = "aaa";
InputStream stringStream = new java.io.ByteArrayInputStream(string.getBytes())

stringStream入力文字列から文字を読み取るストリームです。

OutputStream outputStream = new java.io.ByteArrayOutputStream();
PrintStream printStream = new PrintStream(outputStream);
// .. writes to printWriter and flush() at the end.
String result = outputStream.toString()

printStreamPrintStreamに書き込みoutputStream、文字列を返すことができます。

于 2012-11-11T07:21:02.067 に答える