测试一种从标准输入和输出读取到标准输出的方法



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

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

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

您应该有一个方法,它接受从中读取的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 );
}

最新更新