首頁 >Java >java教程 >如何在 JUnit 中測試 System.out 和 System.err 輸出?

如何在 JUnit 中測試 System.out 和 System.err 輸出?

DDD
DDD原創
2024-12-17 16:31:11149瀏覽

How to Test System.out and System.err Output in JUnit?

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn