Maison  >  Article  >  Java  >  Comment affirmer les messages du journal dans les tests JUnit à l'aide d'un appender personnalisé ?

Comment affirmer les messages du journal dans les tests JUnit à l'aide d'un appender personnalisé ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-30 10:58:02393parcourir

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

Comment affirmer les messages de journal dans les tests JUnit

Lors du test du code qui utilise des enregistreurs Java, il devient essentiel de vérifier que les entrées de journal attendues sont générées. Une approche courante consiste à créer un enregistreur ou un gestionnaire personnalisé pour capturer les événements du journal. Cependant, il existe une solution plus pratique qui exploite les composants de journalisation existants.

Utilisation d'un appender personnalisé

Pour affirmer les messages de journal dans les tests JUnit, vous pouvez créer un appender Log4j personnalisé qui intercepte et stocke les journaux. événements. Voici un exemple d'implémentation :

<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>

Intégration de l'appender

Pour utiliser l'appender personnalisé dans votre test JUnit, suivez ces étapes :

  1. Ajoutez l'appender à l'enregistreur que vous souhaitez surveiller.
  2. Exécutez le code testé pour déclencher l'opération de journalisation.
  3. Récupérez les événements de journal capturés à partir de l'appender.
  4. Validez le message de journal souhaité et le niveau en utilisant les assertions JUnit.

Voici un exemple :

<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>

Considérations

  • Nettoyage : N'oubliez pas de supprimer le appender personnalisé après avoir terminé vos tests pour éviter les fuites de mémoire.
  • Évolutivité : Pour les scénarios de journalisation lourde, pensez à ajouter des filtres à l'appender pour éviter une consommation excessive de mémoire.
  • Granularité : Vous pouvez utiliser plusieurs appenders personnalisés pour surveiller des enregistreurs spécifiques ou même des classes individuelles, offrant ainsi un contrôle précis sur la vérification des journaux.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn