测试从stdin读取并写入标准输出的java程序
我正在编写一些Java编程竞赛的代码。 程序的输入使用stdin输出,输出在stdout上。 你如何测试在stdin / stdout上工作的程序? 这就是我的想法:
由于System.in是InputStream类型,System.out是PrintStream类型,因此我使用此原型在func中编写了代码:
void printAverage(InputStream in, PrintStream out)
现在,我想用junit来测试它。 我想使用一个字符串伪造System.in,并接收字符串中的输出。
@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
,而printStream
又将能够返回一个字符串。
编辑:对不起,我误解了你的问题。
用扫描仪或缓冲读取器读取,后者比前者快得多。
Scanner jin = new Scanner(System.in);
BufferedReader reader = new BufferedReader(System.in);
用打印作者写入标准输出。 您也可以直接打印到Syso,但速度较慢。
System.out.println("Sample");
System.out.printf("%.2f",5.123);
PrintWriter out = new PrintWriter(System.out);
out.print("Sample");
out.close();
链接地址: http://www.djcxy.com/p/78447.html
上一篇: Test java programs that read from stdin and write to stdout