首页 >Java >java教程 >如何在 JUnit 中测试控制台输出?

如何在 JUnit 中测试控制台输出?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-22 07:02:30504浏览

How to Test Console Output in JUnit?

在 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn