[배포]
[Jacoco] Test Coverage
쌈뽕코딩
2025. 6. 5. 20:13
🔍 테스트 커버리지란?
내가 작성한 테스트 코드가 실제 코드에서 얼마나 많은 부분을 실행했는가"를 숫자로 보여주는 지표이다.
예시 코드
public class Calculator {
public int add(int a, int b) {
return a + b;
}
public int subtract(int a, int b) {
return a - b;
}
}
테스트 코드
@Test
void testAdd() {
Calculator c = new Calculator();
assertEquals(5, c.add(2, 3));
}
- 이 경우 add()는 테스트로 실행됨
- 하지만 subtract()는 실행 안 됨 → 테스트 커버리지에는 포함되지 않음
결과적으로 전체 10줄 중 5줄이 테스트에서 실행됨 → 커버리지: 50%
보통 80% 이상을 목표로 삼는 경우가 많다고 한다.
🚀 JaCoCo란?
JaCoCo는 Java용 테스트 커버리지 측정 도구이다.
테스트를 실행하면, 내 코드에서 어떤 줄이 실제 실행됐는지 추적해서, HTML/CSV/XML로 커버리지 리포트를 만들어 준다.
이번에는 아래 3과정을 해보면서 실제 작성한 테스트 커버리지를 측정할 예정이다.
- Gradle에서 JaCoCo 설정하는 법
- 커버리지 리포트 보는 법
- GitHub Actions 연동
1. build.gradle에 JaCoCo 플러그인 추가
plugins {
id 'java' // Java 프로젝트
id 'jacoco' // JaCoCo 플러그인
}
- 이 부분은 JaCoCo를 적용하겠다는 선언이다.
- 이를 추가하면 jacoco는 테스트 커버리지를 측정해준다.
1-2. JaCoCo 버전 명시 (선택 사항)
jacoco {
toolVersion = "0.8.10" // 안정된 최신 버전
}
- Gradle이 기본으로 사용하는 JaCoCo 버전은 고정되어 있어서 최신 버전을 사용하고 싶으면 명시해주는 게 좋다.
- 최신 버전 확인은 여기서 가능하다: https://mvnrepository.com/artifact/org.jacoco/org.jacoco.core
1-3. JaCoCo 테스트 리포트 태스크 설정
my-project/
├── build.gradle
├── settings.gradle
├── src/
│ ├── main/
│ │ └── java/com/example/...
│ └── test/
│ └── java/com/example/...
└── build/
└── reports/
└── jacoco/
└── test/
└── html/
└── index.html ← 여기서 커버리지 확인 가능
test {
useJUnitPlatform() // JUnit 5 사용하는 경우
finalizedBy jacocoTestReport // 테스트 후 리포트 자동 생성
}
jacocoTestReport {
dependsOn test // 먼저 test 태스크가 실행되어야 함
reports {
html.required = true // 시각적인 HTML 리포트 생성
xml.required = true // XML 리포트 생성 (CI 도구 연동용)
csv.required = false // CSV는 보통 필요 없음
}
}
- jacocoTestReport는 test 태스크가 끝난 후 실행된다.
- 생성된 리포트들은 build/reports/jacoco/test/ 경로에 저장된다.
2. 테스트 실행
./gradlew test
- 테스트가 실행되면서 동시에 커버리지 데이터가 수집된다.
2-1. 커버리지 리포트 생성
./gradlew jacocoTestReport
- 이렇게 하면 리포트가 자동으로 생성되고, 결과는 다음 경로에서 확인할 수 있다.
- 📁 build/reports/jacoco/test/html/index.html
2-2. 리포트 확인 해보기 (HTML)
- IntelliJ나 파일 탐색기에서 index.html 파일을 브라우저로 열기
- 열어보면 위와 같은 정보가 시각적으로 나온다.
GitHub Actions에 JaCoCo 테스트 커버리지 연동하기
1. .github/workflows/example.yml 파일 생성
2. JaCoCo 리포트 생성
- name: Build and run tests with coverage
run: ./gradlew clean test jacocoTestReport
// 이미 clean build 작업을 하는 workflow가 있는 경우
- name: Generate JaCoCo Test Coverage Report
run: ./gradlew jacocoTestReport
- ⚠️ 이미 workflow가 있다면 clean build 단계에서 테스트는 실행되므로, test 다시 안해도 됩니다.
- jacocoTestReport 만 실행하면 HTML 커버리지가 생성됩니다.
2-2. 리포트 업로드 (선택: 깃헙에서 다운 가능하게)
- name: Upload JaCoCo Report as Artifact
uses: actions/upload-artifact@v4
with:
name: jacoco-report
path: build/reports/jacoco/test/html
- 리포트 HTML을 GitHub Actions의 아티팩트로 업로드할 수 있다.
3. 커밋 및 푸시
git add .github/workflows/jacoco.yml
git commit -m "Add GitHub Actions for JaCoCo test coverage"
git push origin main
- GitHub → 리포지토리 → Actions 탭
- 워크플로우 클릭 → 하단의 Artifacts → jacoco-report 클릭해서 zip 파일 다운로드
- 압축 해제 후 index.html 열기 → 커버리지 확인