测试从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();