測試使用 Java 記錄器的程式碼時,驗證是否正在產生預期的日誌條目變得至關重要。一種常見的方法是建立自訂記錄器或處理程序來擷取日誌事件。但是,有一個更方便的解決方案,可以利用現有的日誌記錄元件。
要在 JUnit 測試中斷言日誌訊息,您可以建立一個自訂 Log4j Appender 來攔截和儲存日誌事件。以下是範例實作:
<code class="java">import org.apache.log4j.AppenderSkeleton; import org.apache.log4j.Level; import org.apache.log4j.spi.LoggingEvent; import java.util.ArrayList; import java.util.List; public class TestAppender extends AppenderSkeleton { private final List<LoggingEvent> log = new ArrayList<>(); @Override public boolean requiresLayout() { return false; } @Override protected void append(LoggingEvent loggingEvent) { log.add(loggingEvent); } @Override public void close() {} public List<LoggingEvent> getLog() { return new ArrayList<>(log); } }</code>
要在JUnit 測試中使用自訂Appender,請依照下列步驟操作:
這是一個例子:
<code class="java">@Test public void test() { TestAppender appender = new TestAppender(); Logger logger = Logger.getRootLogger(); logger.addAppender(appender); try { // Execute code that calls the logger. Logger.getLogger(MyTest.class).info("Test"); } finally { logger.removeAppender(appender); } List<LoggingEvent> log = appender.getLog(); LoggingEvent firstLogEntry = log.get(0); assertThat(firstLogEntry.getLevel(), is(Level.INFO)); assertThat((String) firstLogEntry.getMessage(), is("Test")); assertThat(firstLogEntry.getLoggerName(), is("MyTest")); }</code>
以上是如何使用自訂 Appender 在 JUnit 測試中斷言日誌訊息?的詳細內容。更多資訊請關注PHP中文網其他相關文章!