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.
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>
Pour utiliser l'appender personnalisé dans votre test JUnit, suivez ces étapes :
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>
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!