Slf4jを使って出力したログの内容を検証する方法を説明します。
なお、Sl4fjについては、以下の記事で説明しています。
http://lavapies9.com/2020/04/16/2020-04-16-101635/
テスト対象のクラス
テスト対象のクラスは以下とします。
import lombok.extern.slf4j.Slf4j; @Slf4j public class Sample { public void sampleLog() { log.info("sample log!"); } }
このクラスのインスタンスを生成し、sampleLog()メソッドを呼んだ際に、期待通りの内容がログ出力されているかテストとします。
テストクラス
テストクラスとテストメソッドは以下のようになります。
import org.junit.After; import org.junit.Before; import org.junit.Test; import java.io.ByteArrayOutputStream; import java.io.PrintStream; import static org.junit.Assert.assertTrue; public class SampleTest { private final ByteArrayOutputStream testErr = new ByteArrayOutputStream(); private final PrintStream originalErr = System.err; @Before public void before() { System.setErr(new PrintStream(testErr)); } @After public void after() { System.setErr(originalErr); } @Test public void テスト() { Sample sample = new Sample(); sample.sampleLog(); assertTrue(testErr.toString().contains("sample")); } }
ログは標準エラーに出力されるので、テスト中だけ標準エラーの出力先を変えて、内容をチェックする、といった感じです。
テストが終わったらafter()で出力先を戻しています。
build.gradle
参考までに、build.gradleの内容を貼っておきます。
plugins { id 'java' } sourceCompatibility = 1.8 repositories { mavenCentral() } dependencies { compileOnly 'org.projectlombok:lombok:1.18.10' annotationProcessor 'org.projectlombok:lombok:1.18.10' implementation 'org.slf4j:slf4j-api:1.7.25' implementation 'org.slf4j:slf4j-simple:1.7.25' testImplementation 'junit:junit:4.12' }