概要
単体テスト時にログ出力の内容を検査する(モック未使用)
環境
- Java
- slf4j 1.7.26
- logback 1.2.3
方法説明
詳細な方法は サンプルコード を参照。
理屈としては、
- テスト開始時にルートロガーに新しく
Appender
を追加する - この時、追加する
Appender
のdoAppend()
をoverride
し、引数として受け取るILoggingEvent
を外部スコープのListにadd()
していく - テストしたい機能が終了した後、Listに入っている
ILoggingEvent
を検査する - 追加した
Appender
をルートロガーからデタッチする
という流れ。
ルートロガーにAppenderを追加しっぱなしでデタッチしないと、以降のテスト全てのロギングを保持することになるので注意。
余談
ルートロガーに追加する前提で書いているが、ロガーを細かく指定して(getLogger("jp.co.hoge")
みたいな)、そこにAppender
を追加すればその部分だけログをとることも可能。