[java] TestContainers와 JaCoCo의 통합

소개

테스트 컨테이너(TestContainers)는 도커(Docker) 환경을 사용하여 테스트를 실행하는 도구입니다. 이를 통해 테스트 환경을 쉽게 설정하고, 테스트 실행 시 실제 환경과 동일한 컨테이너 환경에서 테스트 코드를 실행할 수 있습니다.

JaCoCo는 자바 코드의 테스트 커버리지(Test Coverage) 측정을 위한 라이브러리입니다. 이를 통해 테스트가 얼마나 코드를 커버하는지 분석할 수 있으며, 효과적인 테스트를 작성할 수 있습니다.

이번 글에서는 TestContainers와 JaCoCo를 함께 사용하여 테스트 커버리지를 측정하는 방법을 소개하겠습니다.

설정

먼저, TestContainers를 프로젝트에 추가해야 합니다. Maven을 사용하는 경우, 다음과 같이 의존성을 추가할 수 있습니다:

<dependency>
    <groupId>org.testcontainers</groupId>
    <artifactId>testcontainers</artifactId>
    <version>1.15.3</version>
    <scope>test</scope>
</dependency>

JaCoCo도 마찬가지로 추가해야 합니다. 다음과 같이 의존성을 추가할 수 있습니다:

<dependency>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.8.6</version>
    <executions>
        <execution>
            <id>jacoco-pre-test</id>
            <goals>
                <goal>prepare-agent</goal>
            </goals>
            <configuration>
                <propertyName>jacocoArgLine</propertyName>
            </configuration>
        </execution>
        <execution>
            <id>jacoco-post-test</id>
            <phase>test</phase>
            <goals>
                <goal>report</goal>
            </goals>
        </execution>
    </executions>
</dependency>

테스트

테스트 클래스에는 @Testcontainers 어노테이션을 추가하여 TestContainers와 JaCoCo를 연동할 수 있습니다. 또한, JacocoCoverageHelper 클래스를 사용하여 코드 커버리지 측정을 자동으로 처리할 수 있습니다.

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
import org.testcontainers.containers.MySQLContainer;
import org.testcontainers.junit.jupiter.Testcontainers;

@Testcontainers
public class MyUnitTest {
    
    // TestContainers를 위한 컨테이너 변수
    @RegisterExtension
    public static MySQLContainer<?> mysqlContainer = new MySQLContainer<>("mysql:8.0.26");
    
    // JaCoCo를 위한 코드 커버리지 측정 변수
    // 테스트 포함 전체 코드 커버리지 측정을 위해 "test" 대신 "integrationTest" 사용
    @RegisterExtension
    static final JacocoCoverageHelper jacoco = new JacocoCoverageHelper("integrationTest");

    @Test
    void myTest() {
        // 테스트 코드 작성
    }
}

위의 코드에서 생성한 JacocoCoverageHelper 클래스는 코드 커버리지 측정을 위해 필요한 설정을 자동으로 처리해줍니다. 이를 통해 테스트 실행 시 JaCoCo 보고서를 생성할 수 있습니다.

보고서 확인

Jacoco를 사용하여 코드 커버리지를 측정하는 경우, mvn test 명령을 통해 테스트를 실행하고 커버리지 보고서를 확인할 수 있습니다. 아래 명령을 실행해보세요:

mvn clean test

Jacoco 보고서는 target/site/jacoco/index.html 경로에 생성됩니다. 해당 경로에서 보고서를 열어 테스트 커버리지에 대한 정보를 확인할 수 있습니다.

결론

TestContainers와 JaCoCo를 함께 사용하여 테스트 커버리지를 측정하는 방법을 알아보았습니다. 이를 통해 테스트 환경을 쉽게 설정하고 효율적인 테스트를 작성할 수 있습니다. 보다 정확하고 안정적인 코드 커버리지 측정을 위해 TestContainers와 JaCoCo를 활용해보세요.

참고 자료