코드 커버리지 도구 Jacoco
Java code coverage tools
Jacoco를 활용해서 Pull Request를 할때마다 테스트 커버리지 확인하기
* 코드 커버리지(code coverage) : 소프트웨어의 테스트를 논할 때 얼마나 테스트가 충분한가를 나타내는 지표. 소프트웨어 테스트를 진행했을 때 코드 자체가 얼마나 실행되었는가를 뜻한다
테스트코드를 꼼꼼하게 작성할수록 예외 케이스들을 잘 탐지할 수 있으며, 소프트웨어의 품질을 높이기 위해선 테스트 커버리지가 너무 낮지 않게끔 해야한다.
Jacoco 적용
build.gradle에 적용시키기
# 1단계, jacoco 플러그인 설치
plugins {
id 'jacoco'
}
# 2단계, 테스트가 완료된 후 jacocoTestReport가 실행되도록 함
test {
finalizedBy jacocoTestReport
}
# 3단계, jacoco 버전 설정
jacoco {
toolVersion = "0.8.12"
}
# 4단계, jacocoTestReport가 실행되기 전에 test가 실행되도록 설정하고,
# 코드 커버리지 보고서를 xml 형식으로 생성하도록 설정함(Pull Request에서 커버리지 결과 보기 용이)
jacocoTestReport {
dependsOn test
reports {
xml.required.set(true)
}
}
GitHub Actions 스크립트 작성하기
jacoco 커버리지 지표를 Pull Request에 남기기 위해서 github actions 스크립트를 작성함
name: Jacoco Test Coverage Check
# 1단계
on:
pull_request:
types: [opened, synchronize, reopened]
# 2단계
permissions: write-all
# 3단계
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3 # 3-1단계
with:
fetch-depth:0
- name: Set up JDK 17 # 3-2단계
uses: actions/setup-java@v3
with:
distribution: 'adopt'
java-version: '17'
- name: Create and inject jasypt secret into application-secret.properties # 3-3단계
run: |
touch ./src/main/resources/application-secret.properties
echo "ENCRYPT_KEY=${{ secrets.ENCRYPT_KEY }}" > ./src/main/resources/application-secret.properties
cat ./src/main/resources/application-secret.properties
- name: Grant execute permission for gradlew # 3-4단계
run: chmod +x gradlew
- name: Test with Gradle # 3-5단계
run: |
export ENCRYPT_KEY=${{ secrets.ENCRYPT_KEY }}
./gradlew --info test
- name: Test Coverage Report # 3-6단계
id: jacoco
uses: madrapps/jacoco-report@v1.7.1
with:
title: Test Coverage Report
paths: ${{ github.workspace }}/build/reports/jacoco/test/jacocoTestReport.xml
token: ${{ secrets.GITHUB_TOKEN }}
min-coverage-overall: 30
min-coverage-changed-files: 50
1단계 : Pull Request가 열리거나, 업데이트 되거나, 다시 열릴때마다 워크플로우가 실행되도록 함
2단계 : 모든 범위에 대해 쓰기 권한을 부여함. Pull Request의 코멘트에 쓰기 위해 필요함
3 - 1단계 : actions/checkout 액션을 사용하여 현재 리포지토리의 코드를 체크하고, fetch-depth: 0을 설정하여 모든 커밋 목록을 가져옴
3 - 2단계 : JDK를 설정함
3 - 3단계 : Jasypt키를 ENCRYPT_KEY로 관리한다면 이를 주입해주는 단계 << 참고 사이트 기준
3 - 4단계 : gradlew 실행 권한 부여
3 - 5단계 : ENCRYPT_KEY를 주입하고 테스트를 실행하기 (info 플래그는 실행 정보 출력을 제공함)
3 - 6단계 : Jacoco 테스트 커버리지 보고서를 생성하는 핵심 단계.
github.workspace와 secrets.GITHUB_TOKEN은 GitHub Actions에서 자동으로 제공해준다.
또한 전체 파일의 최소 커버리지(min-coverage-overall)와 변경된 파일의 최소 커버리지(min-coverage-changed-files) 설정 가능 (두개 모두 기본값은 80%임)
- jacocoTestReport에서 path를 별도로 지정할 수 있으며, 별도로 지정하지 않았다면 위 경로로 사용하면 된다고 함
- uses의 버전을 확인하는 곳 : https://github.com/Madrapps/jacoco-report
이후에 GitHub 리포지토리에서 Settings - > Actions - > General - > Workflow permissions에 들어간 다음, Read and Write permissions를 체크해줘야한다.
그리고 Pull Request가 실행되면, 테스트 커버리지를 확인할 수 있다고 한다. (워크플로우 실행 후 확인 가능)
lombok.config 작성
마지막으로 lombok이 작성한 메서드(@Getter, @Setter, ...)에 대해서도 커버리지를 포함하지 않기 위해선 프로젝트 루트 단에 lombok.config를 추가하여 작성하면 된다고 한다.
lombok.addLombokGeneratedAnnotation = true
그럼 정상적인 테스트 커버리지를 확보할 수 있다고 합니다.
'Monew' 카테고리의 다른 글
| CI(지속적 통합) 작성 (0) | 2025.09.12 |
|---|---|
| build.gradle (0) | 2025.09.04 |
| 커밋 컨벤션 : Git Commit Template 플러그인 설치 (0) | 2025.09.04 |
| CI/CD(지속적 통합 및 지속적 배포) 파이프라인 (0) | 2025.09.04 |
| 9월 3일 (0) | 2025.09.03 |