@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user