在 JUnit 中测试系统输出
在遗留系统中,应用程序可能会将错误消息或调试信息打印到标准输出,而不是显式返回错误。使用 JUnit 测试此类输出可能具有挑战性。
问题:
单元测试需要一种方法来断言控制台输出的内容以捕获 System.out.使用 println() 而不是正确的错误
解决方案:
使用 ByteArrayOutputStream 和 System.setXXX() 允许我们重定向系统输出并捕获它测试。
实现:
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); }
测试用例:
@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()); }
注意:
此答案的先前版本称为测试后的 System.setOut(null) 。这就是评论者提到的 NullPointerExceptions 的原因。
以上是如何在 JUnit 中测试 System.out 和 System.err 输出?的详细内容。更多信息请关注PHP中文网其他相关文章!