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'
}