Piszę kod do konkursu programistycznego w języku Java. Dane wejściowe do programu podane są za pomocą stdin, a wyjście na standardowe wyjście. W jaki sposób testujesz programy działające na stdin/stdout? To, co mam na myśli:Testuj programy java, które czytają ze stdin i napisz na stdout
Od System.in jest typu InputStream i System.out jest typu PrintStream pisałem mój kod w func z tego prototypu:
void printAverage(InputStream in, PrintStream out)
Teraz będę lubię to testować za pomocą junit. Chciałbym sfałszować System.in za pomocą ciągu i otrzymać dane wyjściowe w łańcuchu.
@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());
}
Co to jest 'poprawny' sposób wdrożyć getInputStreamFromString() i getPrintStreamForString()?
Czy to sprawia, że jest to bardziej skomplikowane, niż powinno być?
Może http://stackoverflow.com/questions/782178/how-do-i-convert-a-string-to-an-inputstream-in-java i http://stackoverflow.com/questions/216894/ get-an-outputstream-into-a-string może pomóc ... – tcovo
możliwy duplikat [testu JUnit z symulowanym wpisem użytkownika] (http://stackoverflow.com/questions/6415728/junit-testing-with-simulated-user -input) –