Spring

[Packy] 멀티 모듈 프로젝트에서 jacoco test report 통합하여 연동하기

짱정연 2024. 2. 12. 13:15
반응형

1. 들어가며

진행하고 있는 프로젝트는 멀티 모듈로 운영하고 있는데, jacoco 테스트 리포트를 만들면 모듈마다 build 패키지에 리포트가 생성되어 하나로 확인하기 어렵다.

 

Gradle 7.4부터 지원하는 jacoco-report-aggregation 플러그인을 사용하면 여러 모듈에 걸친 테스트 리포트를 하나로 통합하여 관리할 수 있다.

 

2. rootProject - build.gradle

루트 프로젝트의 build.gradle에 아래와 같이 코드를 추가해준다. 주석으로 위에 jacoco라고 적은 부분이 jacoco 연동을 위해 추가된 코드이다.

이제 모든 하위 모듈에 jacoco 플러그인이 추가되었고, ./gradlew testCodeCoverageReport 명령어로 테스트 리포트를 만들 수 있다.

plugins {
    id 'java'
    id 'org.springframework.boot' version '3.2.1'
    id 'io.spring.dependency-management' version '1.1.4'
    // jacoco
    id 'jacoco'
}

java {
    sourceCompatibility = '17'
}

// jacoco
jacoco {
    toolVersion = '0.8.11'

}

// 루트 프로젝트를 포함해 하위 프로젝트 전체에 영향을 주는 설정
allprojects {
    group = 'com.dilly'
    version = '0.0.1-SNAPSHOT'

    repositories {
        mavenCentral()
    }

    // 공통 dependencies
    dependencies {
    }
}

// 해당 프로젝트에 포함된 모든 모듈에 영향을 주는 설정
subprojects {
    apply plugin: 'java'
    apply plugin: 'java-library'
    apply plugin: 'org.springframework.boot'
    apply plugin: 'io.spring.dependency-management'
    // jacoco
    apply plugin: 'jacoco'

    dependencies {
        // 중략 ...
    }
}

tasks.named('test') {
    useJUnitPlatform()
}

bootJar.enabled = false

 

3. report 통합에 사용할 모듈 생성

다른 모듈들과 분리된, 리포트 통합에만 사용할 suport 모듈을 하나 만들어준다.

(지금은 리포트 통합만을 위한 모듈이지만 추후 로깅 등 부수적인 작업을 진행할 모듈로 확장할 수 있을 것이다.)

src 폴더를 사용하지 않기 때문에 지우고 build.gradle만 남겨주었다.

 

4. support 모듈 - build.gradle

jacoco-report-aggregation 플러그인을 추가하고, dependencies에 테스트 결과를 통합할 모듈을 적어준다.

plugins {
    id 'java'
    id 'jacoco-report-aggregation'
}

group = 'com.dilly'
version = '0.0.1-SNAPSHOT'

repositories {
    mavenCentral()
}

dependencies {
    jacocoAggregation project(':packy-api')
    jacocoAggregation project(':packy-domain')
}

test {
    useJUnitPlatform()
}

bootJar.enabled = false
jar.enabled = true

 

testCodeCoverageReport 명령어를 다시 실행하면 아래와 같이 build/reports 폴더에 api 모듈과 domain 모듈의 테스트 리포트가 모두 들어가 있는 모습을 확인할 수 있다.

 

5. 테스트가 끝난 뒤 바로 jacocoTestReport 실행하기

finalizedBy는 test 태스크가 끝난 뒤 바로 testCodeCoverageReport를 실행하겠다는 의미이다.

 

build.gradle에 아래 코드를 추가해주면, 빌드를 한 뒤 자동으로 리포트를 생성할 수 있다.

test {
    useJUnitPlatform()
    finalizedBy 'testCodeCoverageReport'
}

 

Reference

https://docs.gradle.org/current/userguide/jacoco_report_aggregation_plugin.html

반응형