Heim > Java > javaLernprogramm > Hauptteil

Wie kann ich eine Protokollnachricht in JUnit bestätigen?

DDD
Freigeben: 2024-10-30 07:38:02
Original
808 Leute haben es durchsucht

How to Assert on a Log Message in JUnit?

So bestätigen Sie eine Protokollnachricht in JUnit

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:

  1. Erstellen Sie einen Appender:
    Implementieren Sie eine benutzerdefinierte Appender-Unterklasse und überschreiben Sie die append()-Methode, um Protokollierungsereignisse in einer Datenstruktur zu speichern ( z. B. eine Liste).
  2. Appender zum Logger hinzufügen:
    Fügen Sie eine Instanz Ihres benutzerdefinierten Appenders zum gewünschten Logger hinzu. Dieser Schritt kann innerhalb der Testmethode oder mithilfe von Annotationen wie @Before und @After durchgeführt werden.
  3. Zusicherung von Protokollierungsnachrichten:
    Nachdem Sie den zu testenden Code ausgeführt haben, rufen Sie die Liste der protokollierten Nachrichten ab Ereignisse aus Ihrem Appender. Sie können dann die Assertionsmethoden von JUnit verwenden, um die Ebene, die Nachricht und andere Attribute des Protokolleintrags zu überprüfen, wie im bereitgestellten Codeausschnitt gezeigt.

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage