Heim > Java > javaLernprogramm > Wie werden Protokollnachrichten in JUnit-Tests mithilfe eines benutzerdefinierten Appenders bestätigt?

Wie werden Protokollnachrichten in JUnit-Tests mithilfe eines benutzerdefinierten Appenders bestätigt?

Barbara Streisand
Freigeben: 2024-10-30 10:58:02
Original
484 Leute haben es durchsucht

How to Assert Log Messages in JUnit Tests using a Custom Appender?

So stellen Sie Protokollmeldungen in JUnit-Tests sicher

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.

Verwendung eines benutzerdefinierten Appenders

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

Integration des Appenders

Um den benutzerdefinierten Appender in Ihrem JUnit-Test zu verwenden, führen Sie die folgenden Schritte aus:

  1. Fügen Sie den Appender hinzu der Logger, den Sie überwachen möchten.
  2. Führen Sie den zu testenden Code aus, um den Protokollierungsvorgang auszulösen.
  3. Rufen Sie die erfassten Protokollereignisse vom Appender ab.
  4. Stellen Sie die gewünschte Protokollmeldung sicher und Ebene mithilfe von JUnit-Behauptungen.

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

Überlegungen

  • Bereinigung: Denken Sie daran, die zu entfernen Benutzerdefinierter Appender nach Abschluss Ihrer Tests, um Speicherlecks zu verhindern.
  • Skalierbarkeit: Erwägen Sie bei Szenarien mit starker Protokollierung das Hinzufügen von Filtern zum Appender, um übermäßigen Speicherverbrauch zu vermeiden.
  • Granularität:Sie können mehrere benutzerdefinierte Appender verwenden, um bestimmte Logger oder sogar einzelne Klassen zu überwachen und so eine differenzierte Kontrolle über die Protokollüberprüfung zu ermöglichen.

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!

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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage