测试一个从标准输入读取并输出到标准输出的方法。

5

我有一个方法,可以从标准输入读取行并将行写入标准输出。

在JUnit测试中,我如何向该方法发送输入,并如何捕获其输出,以便我可以对其进行断言?


http://programmers.stackexchange.com/a/212360/31260 - gnat
1个回答

18

您不应该有一个从标准输入读取并写入标准输出的方法。

您应该有一个方法,它接受作为参数要读取的InputStream和要写入的PrintStream。(这是一种称为依赖注入(Wikipedia)的原则在方法级别上的应用,通常在类级别上使用。)

然后,在正常情况下,您会传递System.inSystem.out作为参数来调用该方法。

但是当您想要测试它时,可以将其传递给您为测试目的创建的InputStreamPrintStream

因此,您可以使用以下内容:

void testMyAwesomeMethod( String testInput, String expectedOutput )
{
    byte[] bytes = testInput.getBytes( StandardCharsets.UTF_8 );
    InputStream inputStream = new ByteArrayInputStream( bytes );
    StringWriter stringWriter = new StringWriter();
    try( PrintWriter printWriter = new PrintWriter( stringWriter ) )
    {
        myAwesomeMethod( inputStream, printWriter );
    }
    String result = stringWriter.toString();
    assert result.equals( expectedOutput );
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接