[배포]

[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과정을 해보면서 실제 작성한 테스트 커버리지를 측정할 예정이다.

  1. Gradle에서 JaCoCo 설정하는 법
  2. 커버리지 리포트 보는 법
  3. GitHub Actions 연동

1. build.gradle에 JaCoCo 플러그인 추가

plugins {
    id 'java'         // Java 프로젝트
    id 'jacoco'       // JaCoCo 플러그인
}
  • 이 부분은 JaCoCo를 적용하겠다는 선언이다.
  • 이를 추가하면 jacoco는 테스트 커버리지를 측정해준다.

1-2. JaCoCo 버전 명시 (선택 사항)

jacoco {
    toolVersion = "0.8.10"  // 안정된 최신 버전
}

 

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

 

  1. GitHub → 리포지토리 → Actions 탭
  2. 워크플로우 클릭 → 하단의 Artifacts → jacoco-report 클릭해서 zip 파일 다운로드
  3. 압축 해제 후 index.html 열기 → 커버리지 확인