Beim Testen von Code, der Java-Logger verwendet, ist es wichtig zu überprüfen, ob die erwarteten Protokolleinträge generiert werden. Ein gängiger Ansatz besteht darin, einen benutzerdefinierten Logger oder Handler zu erstellen, um die Protokollereignisse zu erfassen. Es gibt jedoch eine bequemere Lösung, die vorhandene Protokollierungskomponenten nutzt.
Um Protokollmeldungen in JUnit-Tests zu bestätigen, können Sie einen benutzerdefinierten Log4j-Appender erstellen, der Protokolle abfängt und speichert Ereignisse. Hier ist eine Beispielimplementierung:
<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>
Um den benutzerdefinierten Appender in Ihrem JUnit-Test zu verwenden, führen Sie die folgenden Schritte aus:
Hier ist ein Beispiel:
<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>
Das obige ist der detaillierte Inhalt vonWie werden Protokollnachrichten in JUnit-Tests mithilfe eines benutzerdefinierten Appenders bestätigt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!