测试从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

下一篇: Java DecimalFormat Scientific Notation Question