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