当前位置: 首页 > 面试题库 >

测试从stdin读取并写入stdout的Java程序

荣晨朗
2023-03-14
问题内容

我正在为Java编程竞赛编写一些代码。程序的输入是使用stdin给出的,输出是在stdout上给出的。你们如何测试可在stdin /
stdout上运行的程序?这就是我的想法:

由于System.in的类型为InputStream,而System.out的类型为PrintStream,因此我使用以下原型在函数中编写了代码

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 是将从输入字符串中读取字符的流。

OutputStream outputStream = new java.io.ByteArrayOutputStream();
PrintStream printStream = new PrintStream(outputStream);
// .. writes to printWriter and flush() at the end.
String result = outputStream.toString()

printStreamPrintStream将写入的,而outputStream后者又将能够返回字符串。



 类似资料:
  • 问题内容: 我正在尝试运行一个应用程序(例如),因此它将从文件中读取stdin并从stdout写入另一个文件。 目前我有 它可以按预期工作,因为我可以对该文件进行某些操作,并且top可以接收它。但是我无法重定向top的输出。我该如何实现? 编辑: 好吧,让我们从头开始。我正在测试: 问题答案: 让我们忘掉这似乎是一条红色的鲱鱼。 要将stdin或stdout映射到文件,可以使用重定向: 甚至:

  • 问题内容: 我试图在Python中使用子进程,以使外部脚本以类似于服务器的方式打开。外部脚本首先加载模型。完成此操作后,它将通过STDIN接受请求,并将处理后的字符串返回给STDOUT。 到目前为止,我已经尝试过 但是,我不能使用 为了通过子过程重复处理input_strings,无论我使用还是,out都将是空的。但是,当我在读取STDOUT之前关闭stdin时,它起作用了,但是这关闭了子进程,这

  • 问题内容: (我是Java新手)我需要启动一个进程并接收2或3个句柄:对于STDIN,STDOUT(和STDERR),因此我可以将输入写入进程并接收其输出,就像命令行管道一样表现(例如“ grep”) 在Python中,可以通过以下代码实现: Java等效项是什么? 到目前为止我已经尝试过 顺便说一句,第一次尝试仅适用于\ n \ n,但不适用于单个\ n(为什么?) 下面的代码有效,但是所有输入

  • 我正在尝试通过 tcp 连接远程执行程序,我想在客户端之间实时共享标准输出和标准输出 我有以下没有错误处理的测试服务器:p我知道,目前我无法执行带有参数的程序,但这很容易处理:) 你看,我尝试与 c.Write() 共享标准输出,但这不起作用。 我认为cmd.Stdin的另一个问题将与Stdout的问题相同。此时我没有实现任何标准函数。 有人能给我一个关于这个函数的提示或示例代码吗?

  • 问题内容: 假设我有一个简单的应用程序,可以从stdin读取行并将其回显到stdout。例如: 我想编写一个测试案例,该案例写入stdin,然后将输出与输入进行比较。例如: 跑步给我以下内容: 我显然在这里做错了什么。我应该如何测试这种类型的代码? 问题答案: 这是一个写入stdin并从stdout读取的示例。请注意,它不起作用,因为输出首先包含“>”。不过,您可以对其进行修改以适合您的需求。

  • 我想从STDIN读取输入。我在C中使用fork()方法。我有子进程和父进程。我的输入是多行的。父进程只等待子进程终止,子进程只读取第一行,子进程终止后,父进程继续读取。我想要打印行。例如;输入-> null 子进程打印“星期一”,父进程打印“星期二”和“星期三”。一旦到达文件结尾,程序就会终止。 ./program