Probar programas java que leen desde stdin y escribir en stdout
Estoy escribiendo un código para un concurso de programación en java. La entrada al programa se da usando stdin y la salida está en stdout. ¿Cómo estáis probando los programas que funcionan en stdin / stdout? Esto es lo que estoy pensando:
Como System.in es de tipo InputStream y System.out es de tipo PrintStream, escribí mi código en una función con este prototipo:
void printAverage(InputStream in, PrintStream out)
Ahora, me gustaría probar esto usando junit. Me gustaría falsificar el System.in usando una cadena y recibir la salida en una cadena.
@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());
}
¿Cuál es la forma 'correcta' de implementar getInputStreamFromString () y getPrintStreamForString ()?
¿Estoy haciendo esto más complicado de lo que necesita ser?