[Spring] JaCoCo를 이용한 코드 커버리지 측정

·2024년 6월 17일

spring

목록 보기
18/18

1. Code Coverage란?

코드 커버리지란 애플리케이션의 test 코드가 본 코드를 얼마나 커버하고 있냐를 측정해주는 지표이다.

2. JaCoCo란?

JaCoCo란 Java 코드의 코드 커버리지를 측정하는 라이브러리이다. 테스트를 실행하고, 그 결과를 html이나 csv, xml 파일을 통해서 시각화해준다.

결과에 대한 기준치를 설정할 수도 있다. 해당 커버리지가 사용자가 설정한 퍼센테이지에 미치지 못하면 build 자체가 되지 않게 설정하여 테스트 코드의 작성을 강제한다.

3. JaCoCo 추가하기

의존성 추가

plugins {
    id 'jacoco'
}
  • build.gradle의 plugins에 JaCoCo를 설정해준다.

JaCoCo 설정

tasks.named('test') {
    useJUnitPlatform()
    finalizedBy 'jacocoTestReport' // test가 끝나면 jacocoTestReport 동작
}

// jacoco report 설정
jacocoTestReport {
    reports {
        // html로 report 생성하기
        // 빌드경로/jacoco/report.html 폴더 내부로 경로 설정
        html.destination file("jacoco/report.html")
    }
    // 커버리지 보고서 제외 범위 설정
    getClassDirectories().setFrom(
            files(classDirectories.files.collect {
                fileTree(dir: it, exclude: [
                        '**/dto', // dto package 내부는 제외
                        '**/config',
                        '**/util',
                        "**/jwt"
                ])
            })
    )

    // jacocoTestReport가 끝나면 jacocoTestCoverageVerification 동작
    finalizedBy 'jacocoTestCoverageVerification'
}

// jacoco 커버리지 검증 설정
jacocoTestCoverageVerification {
    violationRules {
        rule {
            enabled = true // 커버리지 적용 여부
            element = 'CLASS' // 커버리지 적용 단위

            // 라인 커버리지 설정
            // 적용 대상 전체 소스 코드들을 한줄 한줄 따졌을 때 테스트 코드가 작성되어 있는 줄의 빈도
            // 테스트 코드가 작성되어 있는 비율이 60% 이상이어야 함
            limit {
                counter = 'LINE'
                value = 'COVEREDRATIO'
                minimum = 0.60
            }

            // 브랜치 커버리지 설정
            // if-else 등을 활용하여 발생되는 분기들 중 테스트 코드가 작성되어 있는 빈도
            // 테스트 코드가 작성되어 있는 비율이 60% 이상이어야 함
            limit {
                counter = 'BRANCH'
                value = 'COVEREDRATIO'
                minimum = 0.60
            }
        }
    }
}

gradle tasks

  • intellij gradle 탭의 Tasks > Verification에 jacocoTestCoverageVerification과 jacocoTestReport 명령이 생긴것을 확인할 수 있다.

4. JaCoCo 코드 커버리지 확인

리포트 생성

Gradle에서 test, jacocoTestReport, jacocoTestCoverageVerification 명령을 순서대로 동작시켜 코드 커버리지를 생성할 수 있다. 각각의 명령은 테스트 코드를 실행하고(test), 리포트를 생성(jacocoTestReport)한 다음, 커버리지를 체크(jacocoTestCoverageVerification)한다.

jacocoTestCoverageVerification 실행 시 설정해둔 퍼센테이지에 미치지 못하면 에러가 뜨며 명령이 실행되지 않는다.

코드 커버리지 확인

  • gradle에 설정해둔 생성 경로에서 index.html을 원하는 브라우저로 열면 커버리지 퍼센트를 확인 할 수 있다.

  • 각 패키지, 클래스마다 세부정보들을 확인 할 수 있다.

  • 각 클래스의 메서드를 클릭하여 세부 코드의 커버리지를 확인 할 수 있다.
  • 빨간색은 커버하지 못 한 부분, 노란색은 부분 커버, 초록색은 완벽하게 커버가 된 부분으로 각 라인마다 확인 가능하다.

0개의 댓글