测试从stdin读取并写入stdout的java程序
我正在为java编程竞赛编写一些代码。 程序的输入是使用stdin给出的,输出是在stdout上。 你们如何测试在stdin / stdout上运行的程序? 这就是我的想法:
由于System.in的类型为InputStream而System.out的类型为PrintStream,因此我使用此原型在func中编写了我的代码:
void printAverage(InputStream in, PrintStream out)
现在,我想用junit测试一下。 我想使用String伪造System.in并在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()的“正确”方法是什么?
我这让它变得比它需要的更复杂吗?
请尝试以下方法:
String string = "aaa"; InputStream stringStream = new java.io.ByteArrayInputStream(string.getBytes())
stringStream
是一个将从输入字符串中读取chard的流。
OutputStream outputStream = new java.io.ByteArrayOutputStream(); PrintStream printStream = new PrintStream(outputStream); // .. writes to printWriter and flush() at the end. String result = outputStream.toString()
printStream
是一个PrintStream
,它将写入outputStream
,而outputStream
又能返回一个字符串。
编辑:对不起,我误解了你的问题。
使用扫描仪或bufferedreader读取,后者比前者快得多。
Scanner jin = new Scanner(System.in); BufferedReader reader = new BufferedReader(System.in);
用print writer写入stdout。 您也可以直接打印到Syso,但速度较慢。
System.out.println("Sample"); System.out.printf("%.2f",5.123); PrintWriter out = new PrintWriter(System.out); out.print("Sample"); out.close();