Testen Sie Java-Programme, die von stdin lesen und in stdout schreiben

Ich schreibe Code für einen Programmierwettbewerb in Java. Die Eingabe in das Programm erfolgt über stdin und die Ausgabe erfolgt über stdout. Wie testen Leute Programme, die mit stdin / stdout funktionieren? Das ist was ich denke:

Da System.in vom Typ InputStream und System.out vom Typ PrintStream ist, habe ich meinen Code in einer Funk mit diesem Prototyp geschrieben:

void printAverage(InputStream in, PrintStream out)

Nun möchte ich dies mit junit testen. Ich möchte die System.in mit einem String fälschen und die Ausgabe in einem String erhalten.

@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());
}

Wie werden getInputStreamFromString () und getPrintStreamForString () "richtig" implementiert?

Mache ich das komplizierter, als es sein muss?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage