Logbackのログ出力内容をJUnitとMockitoでテストする書き方になります。
@Test
public void test() {
ch.qos.logback.classic.Logger root = (ch.qos.logback.classic.Logger) LoggerFactory.getLogger(ch.qos.logback.classic.Logger.ROOT_LOGGER_NAME);
@SuppressWarnings("unchecked")
final Appender<ILoggingEvent> mockAppender = mock(Appender.class);
when(mockAppender.getName()).thenReturn("MOCK");
root.addAppender(mockAppender);
// 何かしらのログを出力する処理
verify(mockAppender).doAppend(argThat(new ArgumentMatcher<LoggingEvent>() {
@Override
public boolean matches(Object argument) {
return ((LoggingEvent)argument).getFormattedMessage().contains("initOption() fail perse.");
}
}));
}
以上のようなテストメソッドを書くことで、ログに"initOption() fail perse."を含む
メッセージが出力されたかどうかをテストできます。
ちなみに利用したJUnitとMockitoのバージョンを表すMavenのpom.xml以下の通り。
<dependencies>
<!-- JUNIT DEPENDENCY FOR TESTING -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
<!-- Mockito for support of mocking in test -->
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>1.9.0</version>
<scope>test</scope>
</dependency>
</dependencies>