Test java programs that read from stdin and write to stdout
我正在编写一些Java编程竞赛的代码。程序的输入使用stdin给出,输出在stdout上。你们如何测试在stdin/stdout上工作的程序?我就是这么想的:
由于system.in的类型为inputstream,而system.out的类型为printstream,因此我使用此原型在func中编写了代码:
1 |
现在,我想用JUnit测试这个。我想用一个字符串来伪造system.in并接收一个字符串中的输出。
1 2 3 4 5 6 7 8 9 10 11 12 13 | @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()的"正确"方法是什么?
我是不是让事情变得更复杂了?
请尝试以下操作:
1 2 | String string ="aaa"; InputStream stringStream = new java.io.ByteArrayInputStream(string.getBytes()) |
1 2 3 4 | OutputStream outputStream = new java.io.ByteArrayOutputStream(); PrintStream printStream = new PrintStream(outputStream); // .. writes to printWriter and flush() at the end. String result = outputStream.toString() |
编辑:对不起,我误解了你的问题。
用扫描器或缓冲阅读器阅读,后者比前者快得多。
1 2 3 |
使用打印书写器写入stdout。您也可以直接打印到Syso,但速度较慢。
1 2 3 4 5 6 | System.out.println("Sample"); System.out.printf("%.2f",5.123); PrintWriter out = new PrintWriter(System.out); out.print("Sample"); out.close(); |