Przetestuj programy Java, które czytają ze standardowego wejścia i zapisują na standardowe wyjście
Piszę kod do konkursu programistycznego w Javie. Dane wejściowe do programu są podawane za pomocą stdin, a wyjście jest na stdout. Jak testujesz programy działające na stdin / stdout? Oto, o czym myślę:
Ponieważ System.in jest typu InputStream i System.out jest typu PrintStream, napisałem mój kod w func z tym prototypem:
void printAverage(InputStream in, PrintStream out)
Teraz chciałbym to przetestować za pomocą junit. Chciałbym sfałszować System.in używając String i otrzymać wyjście w 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());
}
Jaki jest „poprawny” sposób implementacji getInputStreamFromString () i getPrintStreamForString ()?
Czy robię to bardziej skomplikowane niż musi być?