Bael-3960, asserting log messages with junit code.
This commit is contained in:
marc06210
2020-05-04 18:03:21 +02:00
committed by GitHub
parent 04cae578c5
commit 67b6f4f54b
7 changed files with 173 additions and 0 deletions

View File

@@ -0,0 +1,48 @@
package com.baeldung.junit.log;
import static org.assertj.core.api.Assertions.assertThat;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.slf4j.LoggerFactory;
import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.LoggerContext;
public class BusinessWorkerUnitTest {
private static MemoryAppender memoryAppender;
private static final String LOGGER_NAME = "com.baeldung.junit.log";
private static final String MSG = "This is a test message!!!";
@Before
public void setup() {
Logger logger = (Logger) LoggerFactory.getLogger(LOGGER_NAME);
memoryAppender = new MemoryAppender();
memoryAppender.setContext((LoggerContext) LoggerFactory.getILoggerFactory());
logger.setLevel(Level.DEBUG);
logger.addAppender(memoryAppender);
memoryAppender.start();
}
@After
public void cleanUp() {
memoryAppender.reset();
memoryAppender.stop();
}
@Test
public void test() {
BusinessWorker worker = new BusinessWorker();
worker.generateLogs(MSG);
// I check that I only have 4 messages (all but trace)
assertThat(memoryAppender.countEventsForLogger(LOGGER_NAME)).isEqualTo(4);
// I look for a specific message at a specific level, and I only have 1
assertThat(memoryAppender.search(MSG, Level.INFO).size()).isEqualTo(1);
// I check that the entry that is not present is the trace level
assertThat(memoryAppender.contains(MSG, Level.TRACE)).isFalse();
}
}

View File

@@ -0,0 +1,51 @@
package com.baeldung.junit.log;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.read.ListAppender;
/**
* In memory slf4j appender<br/>
* Convenient appender to be able to check slf4j invocations
*/
public class MemoryAppender extends ListAppender<ILoggingEvent> {
public void reset() {
this.list.clear();
}
public boolean contains(String string, Level level) {
return this.list.stream()
.anyMatch(event -> event.getMessage().toString().contains(string)
&& event.getLevel().equals(level));
}
public int countEventsForLogger(String loggerName) {
return (int) this.list.stream()
.filter(event -> event.getLoggerName().contains(loggerName)).count();
}
public List<ILoggingEvent> search(String string) {
return this.list.stream()
.filter(event -> event.getMessage().toString().contains(string))
.collect(Collectors.toList());
}
public List<ILoggingEvent> search(String string, Level level) {
return this.list.stream()
.filter(event -> event.getMessage().toString().contains(string)
&& event.getLevel().equals(level))
.collect(Collectors.toList());
}
public int getSize() {
return this.list.size();
}
public List<ILoggingEvent> getLoggedEvents() {
return Collections.unmodifiableList(this.list);
}
}