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

Dan*_*Bak 4 java testing junit unit-testing

我有一个方法从标准输入读取行并将行写入标准输出.

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

Mik*_*kis 17

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

你应该有一个方法,它接受InputStream它所读取的参数以及PrintStream它所写入的参数.(这是一个应用程序,在方法级别,称为依赖注入(维基百科)的原则,通常在类级别使用.)

然后,在正常情况下,您调用该方法传递它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 );
}
Run Code Online (Sandbox Code Playgroud)