Протестируйте Java-программы, которые читают из stdin и пишут в stdout

Я пишу код для конкурса программирования в Java. Вход в программу дается с использованием стандартного ввода, а вывод - на стандартный вывод. Как вы тестируете программы, которые работают на stdin / stdout? Вот о чем я думаю:

Поскольку System.in имеет тип InputStream, а System.out имеет тип PrintStream, я написал свой код в функции с этим прототипом:

void printAverage(InputStream in, PrintStream out)

Теперь я хотел бы проверить это с помощью junit. Я хотел бы подделать System.in с помощью String и получить вывод в виде 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 ()?

Я делаю это более сложным, чем это должно быть?

Ответы на вопрос(2)

Ваш ответ на вопрос