Einführung:
Testen des Verhaltens von Code, der mit externen Daten kommuniziert Systeme beinhalten häufig die Überprüfung des Inhalts und Formats der generierten Nachrichten. In Java ist die Protokollierung eine gängige Methode zum Aufzeichnen solcher Nachrichten. In diesem Artikel wird erläutert, wie Unit-Tests für Protokolleinträge mithilfe des JUnit-Frameworks durchgeführt werden.
JUnit-Behauptungen zu Protokollnachrichten:
Der in der Frage bereitgestellte Codeausschnitt zielt auf die Behauptung ab dass ein bestimmter Protokolleintrag mit einer bestimmten Ebene (z. B. INFO) und einer Meldung („x ist passiert“) vom zu testenden Code generiert wurde. Um dies zu erreichen, können Sie einen benutzerdefinierten Logger oder Handler einsetzen, der Protokollereignisse abfängt und speichert.
Benutzerdefinierter Logger-/Handler-Ansatz:
Dieser Ansatz erfordert die Erstellung eines speziellen Loggers oder Handler, der Protokollierungsereignisse erfasst. Die Protokollanweisungen im zu testenden Code werden dann an diesen benutzerdefinierten Logger weitergeleitet, wodurch das Abrufen und Überprüfen protokollierter Nachrichten ermöglicht wird. Die Implementierung dieses Ansatzes kann jedoch komplex sein und erfordert eine Änderung des zu testenden Codes.
Log Collector-Muster:
Eine bequemere Lösung ist die Verwendung eines benutzerdefinierten Appenders Zeichnet Protokollierungsereignisse in einer Sammlung oder Liste auf. So können Sie dies erreichen:
Beispielimplementierung:
Der folgende Beispielcode veranschaulicht das Log-Collector-Muster:
<code class="java">import org.apache.log4j.AppenderSkeleton; import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.junit.Test; import java.util.ArrayList; import java.util.List; import static org.junit.Assert.assertThat; import static org.hamcrest.CoreMatchers.is; public class LogCollectorTest { @Test public void testLogMessage() { // Create a custom appender to collect logging events. final TestAppender appender = new TestAppender(); // Add the appender to the logger we wish to test. final Logger logger = Logger.getLogger(LogCollectorTest.class); logger.addAppender(appender); // Execute code under test. logger.info("Test"); // Retrieve the list of logged events. final List<LoggingEvent> logs = appender.getLog(); // Perform assertions on the first log entry. assertThat(logs.get(0).getLevel(), is(Level.INFO)); assertThat(logs.get(0).getMessage(), is("Test")); } private static 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>
Fazit:
Das Log-Collector-Muster bietet eine wiederverwendbare und bequeme Möglichkeit zur Bestätigung Protokollmeldungen in JUnit-Tests. Durch die Erfassung protokollierter Ereignisse in einer Datenstruktur können Sie deren Inhalt und Format leicht überprüfen und so die Korrektheit der Interaktion Ihres Codes mit Protokollierungssystemen sicherstellen.
Das obige ist der detaillierte Inhalt vonWie kann ich eine Protokollnachricht in JUnit bestätigen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!