Протестируйте 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 ()?
Я делаю это более сложным, чем это должно быть?