在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()); }
結論
透過將控制台輸出重新導向ByteStream並使用System.setXXX() 配置系統流,您可以有效地測試和斷言控制台輸出在你的JUnit測試中。
以上是如何在 JUnit 中測試控制台輸出?的詳細內容。更多資訊請關注PHP中文網其他相關文章!