Maison > Java > javaDidacticiel > le corps du texte

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

Barbara Streisand
Libérer: 2024-10-30 10:58:02
original
392 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!