Inhaltsverzeichnis
So bestätigen Sie eine Protokollnachricht in JUnit
Heim Java javaLernprogramm Wie kann ich eine Protokollnachricht in JUnit bestätigen?

Wie kann ich eine Protokollnachricht in JUnit bestätigen?

Oct 30, 2024 am 07:38 AM

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&lt;LoggingEvent&gt; 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&lt;LoggingEvent&gt; log = new ArrayList&lt;&gt;();

        @Override
        public boolean requiresLayout() {
            return false;
        }

        @Override
        protected void append(LoggingEvent loggingEvent) {
            log.add(loggingEvent);
        }

        @Override
        public void close() { }

        public List&lt;LoggingEvent&gt; getLog() {
            return new ArrayList&lt;&gt;(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!

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

Heiße Artikel -Tags

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie funktioniert der Klassenladungsmechanismus von Java, einschließlich verschiedener Klassenloader und deren Delegationsmodelle? Wie funktioniert der Klassenladungsmechanismus von Java, einschließlich verschiedener Klassenloader und deren Delegationsmodelle? Mar 17, 2025 pm 05:35 PM

Wie funktioniert der Klassenladungsmechanismus von Java, einschließlich verschiedener Klassenloader und deren Delegationsmodelle?

Top 4 JavaScript -Frameworks in 2025: React, Angular, Vue, Svelte Top 4 JavaScript -Frameworks in 2025: React, Angular, Vue, Svelte Mar 07, 2025 pm 06:09 PM

Top 4 JavaScript -Frameworks in 2025: React, Angular, Vue, Svelte

Wie benutze ich Maven oder Gradle für das fortschrittliche Java -Projektmanagement, die Erstellung von Automatisierung und Abhängigkeitslösung? Wie benutze ich Maven oder Gradle für das fortschrittliche Java -Projektmanagement, die Erstellung von Automatisierung und Abhängigkeitslösung? Mar 17, 2025 pm 05:46 PM

Wie benutze ich Maven oder Gradle für das fortschrittliche Java -Projektmanagement, die Erstellung von Automatisierung und Abhängigkeitslösung?

Wie kann ich funktionale Programmierungstechniken in Java implementieren? Wie kann ich funktionale Programmierungstechniken in Java implementieren? Mar 11, 2025 pm 05:51 PM

Wie kann ich funktionale Programmierungstechniken in Java implementieren?

Node.js 20: wichtige Leistungssteigerung und neue Funktionen Node.js 20: wichtige Leistungssteigerung und neue Funktionen Mar 07, 2025 pm 06:12 PM

Node.js 20: wichtige Leistungssteigerung und neue Funktionen

ICEBERG: Die Zukunft von Data Lake Tabellen ICEBERG: Die Zukunft von Data Lake Tabellen Mar 07, 2025 pm 06:31 PM

ICEBERG: Die Zukunft von Data Lake Tabellen

Wie kann ich JPA (Java Persistence-API) für Objektrelationszuordnungen mit erweiterten Funktionen wie Caching und faulen Laden verwenden? Wie kann ich JPA (Java Persistence-API) für Objektrelationszuordnungen mit erweiterten Funktionen wie Caching und faulen Laden verwenden? Mar 17, 2025 pm 05:43 PM

Wie kann ich JPA (Java Persistence-API) für Objektrelationszuordnungen mit erweiterten Funktionen wie Caching und faulen Laden verwenden?

Wie implementiere ich mehrstufige Caching in Java-Anwendungen mit Bibliotheken wie Koffein oder Guava-Cache? Wie implementiere ich mehrstufige Caching in Java-Anwendungen mit Bibliotheken wie Koffein oder Guava-Cache? Mar 17, 2025 pm 05:44 PM

Wie implementiere ich mehrstufige Caching in Java-Anwendungen mit Bibliotheken wie Koffein oder Guava-Cache?

See all articles