본문 바로가기
Test

Jacoco 설정

by greeng00se 2022. 9. 13.

JaCoCo(Java Code Coverage)

  • 자바용 무료 코드 커버리지 라이브러리입니다.
  • Gradle을 사용하는 경우 Jacoco 플러그인을 통해 프로젝트에 적용할 수 있습니다.

JaCoCo 플러그인 적용

plugins {
    id 'jacoco'
}
  • plugins에 jacoco를 추가합니다.
  • 플러그인을 적용한다면 jacocoTestReport, jacocoTestCoverageVerification 작업이 기본적으로 생성됩니다.

테스트와 보고서간 종속성 설정

test{
    useJUnitPlatform()
    finalizedBy 'jacocoTestReport'
}
  • 보고서 생성의 경우 테스트가 선행되어야합니다. 따라서 Test를 실행한다면 보고서를 생성할 수 있게 설정합니다.
  • HTML로 생성된 보고서는 다음 위치에 생성됩니다.
    • $buildDir/reports/jacoco/test

JaCoCo 리포트에서 제외

private excludedClassFilesForReport(classDirectories) {
    classDirectories.setFrom(
            files(classDirectories.files.collect {
                fileTree(dir: it, exclude: [
                        "**/Q*",
                        "**/*Dto*",
                        "**/*Application*",
                        "**/*Config*"
                ])
            })
    )
}
  • jacocoTestReport, jacocoTestCoverageVerification 작업에서 수집을 원하지 않는 클래스 파일을 제외하기 위해 사용합니다.
  • jacocoTestCoverageVerification rule의 exclude에서 제외할 클래스 파일명을 추가하는 방법도 있지만 전체 커버리지에 대한 룰이 클래스 파일 제외 전 기준으로 적용이 되었습니다.
  • 따라서 위 메서드를 작업당 한 번씩 호출하는 방법으로 리포트에서 제외시켰습니다.

jacocoTestReport 설정

jacocoTestReport {
    // 생성할 보고서 유형 설정
    reports {
        html.enabled true
        xml.enabled false
        csv.enabled true
    }

    excludedClassFilesForReport(classDirectories)

    finalizedBy 'jacocoTestCoverageVerification'
}
  • 보고서 생성에 대한 task입니다.
  • reports를 통해 생성할 보고서의 유형을 선택할 수 있습니다.
  • 보고서를 생성하고 나면 jacocoTestCoverageVerification를 실행하도록 합니다.

jacocoTestCoverageVerification 설정

jacocoTestCoverageVerification {
    excludedClassFilesForReport(classDirectories)
    violationRules {

        rule {
            // element default = BUNDLE
            enabled = true

            limit {
                // counter default = INSTRUCTION
                // value default = COVEREDRATIO
                minimum = 0.80
            }
        }
    }
}
  • 커버리지 기준을 만족하는지에 대해 검증을 하는 task입니다.
  • violationRules로 커버리지 기준을 설정할 수 있습니다.
  • rule은 여러 개 설정할 수 있고 브랜치 커버리지, 라인 커버리지 등 다양하게 기준을 설정할 수 있습니다.
    • element → 커버리지 체크 기준을 설정할 수 있습니다.
    • enabled → 룰의 적용 여부를 설정할 수 있습니다.
    • limit → 제한 설정에 대한 내용이 포함됩니다.

Lombok jacoco에서 제외

lombok.addLombokGeneratedAnnotation = true
  • 프로젝트 최상단에 lombok.config 파일을 생성해 위와 같이 작성합니다.
  • lombok으로 자동 생성된 메서드는 jacoco에서 제외됩니다.

참고 자료