ログ出力内容確認テスト(Junit5)
logunitを使用して検証する方法を説明する。
logunit(Github)
依存関係の追加
gradleを使用している場合は、build.gradleに以下の記述を追加する。
dependencies { testImplementation "io.github.netmikey.logunit:logunit-core:1.1.3" testRuntimeOnly "io.github.netmikey.logunit:logunit-logback:1.1.3" }
mavenを使用している場合は、pom.xmlに以下の記述を追加する。
<dependencies> <dependency> <groupId>io.github.netmikey.logunit</groupId> <artifactId>logunit-core</artifactId> <version>1.1.3</version> <scope>test</scope> </dependency> <dependency> <groupId>io.github.netmikey.logunit</groupId> <artifactId>logunit-logback</artifactId> <version>1.1.3</version> <scope>test</scope> </dependency> </dependencies>
検証方法
LogCapturer
を使用してログのキャプチャ設定を行い、出力されたログの内容を検証する
import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.HashMap; import java.util.List; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; import org.slf4j.LoggerFactory; import org.slf4j.MDC; import org.slf4j.event.Level; import org.slf4j.event.LoggingEvent; import io.github.netmikey.logunit.api.LogCapturer; class SampleLogTest { // ログのキャプチャ設定(キャプチャ対象のクラスとログレベルを指定可能) @RegisterExtension LogCapturer logs = LogCapturer.create().captureForType(LogExample.class, Level.WARN); @Test public void execute_ログ検証() { // テスト実行 new LogExample().execute(); // ログ出力内容確認(Warn以上のログのみ) List<LoggingEvent> events = logs.getEvents(); assertEquals(events.size(), 3); assertEquals(events.get(0).getMessage(), "error log 1"); assertEquals(events.get(1).getMessage(), "error log 2"); assertEquals(events.get(2).getMessage(), "warn log 1"); // Debug、Infoは含まれない logs.assertDoesNotContain("debug log 1"); logs.assertDoesNotContain("info log 1"); } /** * テスト対象クラス */ class LogExample { public void execute() { // MDCを初期化 MDC.setContextMap(new HashMap<String, String>()); var logger = (ch.qos.logback.classic.Logger) LoggerFactory.getLogger(LogExample.class); logger.info("info log 1"); logger.error("error log 1"); logger.debug("debug log 1"); logger.error("error log 2"); logger.warn("warn log 1"); } } }
Junit5の使用方法も記事にしているのでよかったらご覧ください。 olafnosuke.hatenablog.com