I use log checking in cases where I consider it very important to register at a certain level. Here's how I do it using Mockito:
Utility class
public final class LoggingTestUtil { private LoggingTestUtil() { } public static void setupLoggingMock(Logger logger, Appender<ILoggingEvent> appender) { logger = (ch.qos.logback.classic.Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME); when(appender.getName()).thenReturn("MOCK"); logger.addAppender(appender); } public static void verifyLogAppended(Appender<ILoggingEvent> appender, final String loggedString) { verify(appender).doAppend(argThat(new ArgumentMatcher<LoggingEvent>() { @Override public boolean matches(final Object argument) { return ((LoggingEvent) argument).getMessage().contains(loggedString); } })); } public static void verifyLogAppendedAtLevel(Appender<ILoggingEvent> appender, final Level level) { verify(appender).doAppend(argThat(new ArgumentMatcher<LoggingEvent>() { @Override public boolean matches(final Object argument) { return ((LoggingEvent) argument).getLevel().equals(level); } })); } public static void verifyLogAppendedAtLevel(Appender<ILoggingEvent> appender, final Level level, final String loggedString) { verify(appender).doAppend(argThat(new ArgumentMatcher<LoggingEvent>() { @Override public boolean matches(final Object argument) { LoggingEvent event = (LoggingEvent) argument; return event.getLevel().equals(level) && event.getMessage().contains(loggedString); } })); } }
In test class
private static Logger root; @Mock private static Appender<ILoggingEvent> mockAppender;
source share