我有一个方法,它从标准输入中读取行,并将行写入标准输出。
在JUnit测试中,我如何向方法发送输入,如何捕获其输出,以便对其进行断言?
您不应该有一个从标准输入读取并写入标准输出的方法。
您应该有一个方法,它接受从中读取的InputStream
和写入的PrintStream
作为参数。(这是一个在方法级别的应用程序,其原理被称为依赖注入(Wikipedia),通常在类级别使用。)
然后,在正常情况下,调用该方法,将System.in
和System.out
作为参数传递给它。
但是,当您想要测试它时,您可以将您为测试目的创建的InputStream
和PrintStream
传递给它。
因此,您可以使用以下内容:
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 );
}