在 JUnit 中测试控制台输出
在测试设计不佳的遗留应用程序时,您可能会遇到将错误消息写入标准输出的代码。要在 JUnit 中断言此类控制台输出,您需要一种重定向和捕获输出的方法。
重定向控制台输出
Java 系统可以配置为发送控制台输出到指定的流。我们可以利用这种机制来捕获和测试输出。
使用 ByteArrayOutputStream 捕获输出
ByteArrayOutputStream 可用于捕获控制台输出。为此,我们将标准输出流替换为写入 ByteArrayOutputStream 的新流。
示例:
private final ByteArrayOutputStream outContent = new ByteArrayOutputStream(); private final ByteArrayOutputStream errContent = new ByteArrayOutputStream(); private final PrintStream originalOut = System.out; private final PrintStream originalErr = System.err; @Before public void setUpStreams() { System.setOut(new PrintStream(outContent)); System.setErr(new PrintStream(errContent)); } @After public void restoreStreams() { System.setOut(originalOut); System.setErr(originalErr); }
测试控制台输出
捕获输出后,我们可以使用 JUnit 断言其内容
示例测试用例:
@Test public void out() { System.out.print("hello"); assertEquals("hello", outContent.toString()); } @Test public void err() { System.err.print("hello again"); assertEquals("hello again", errContent.toString()); }
结论
通过将控制台输出重定向到 ByteArrayOutputStreams 并使用 System.setXXX() 配置系统流,您可以有效地测试和断言控制台输出在你的 JUnit 测试中。
以上是如何在 JUnit 中测试控制台输出?的详细内容。更多信息请关注PHP中文网其他相关文章!