새소식

반응형
Development

[DevOps] jacoco 코드 커버리지

  • -
반응형

jacoco

자바 코드커버리지를 측정할 때 사용하는 오픈소스 라이브러리 

java code coverage의 약자로 ja co co 

 

코드커버리지

테스트의 수행 결과를 수치로 나타내는 방법 

테스트를 진행했을 때 코드 자체가 얼마나 실행되었는가를 수치로 확인하는 것 

즉, 테스트 코드가 적절하게 작성이 되었는지를 측정하는 방식 중에 하나이다. 

 

gradle 설정 

plugins {
    id 'jacoco'
}
jacoco {
//  toolVersion = '0.8.12'
//  테스트결과 리포트를 저장할 경로 변경
//  reportsDir = ${project.reporting.baseDir}/jacoco // default location 
}

위와 같이 설정하면, gradle에서 jacoco를 사용할 준비가 된 것이다. 

 

gradle task 설정

  • jacocoTestReport
    • 커버리지 결과를 리포트 형태로 저장해 주는 task
    • html, xml, csv 형태를 지원
  • jacocoTestCoverageVerification
    • 커버리지 기준을 정의하고, 해당 기준에 부합하는지 체크해 주는 task 
    • 결과의 따라 gradle 빌드의 성공/실패를 정의할 수 있다

jacocoTestReport

jacocoTestReport {
    reports {
        xml.required = true
        csv.required = true
        html.required = true
//        xml.outputLocation = layout.buildDirectory.dir('jacocoxml')
    }
}

html은 로컬에서 사용자가 보기 편한 형태로 제공되고 

xml은 sonarQube와 같은 플랫폼에 연동할 때 사용할 수 있다. 

 

jacocoTestCoverageVerification

jacocoTestCoverageVerification {
    violationRules {
        rule {
            // 'element'가 없으면 프로젝트의 전체 파일을 합친 값을 기준으로 한다.
            limit {
                // 'counter'를 지정하지 않으면 default는 'INSTRUCTION'
                // 'value'를 지정하지 않으면 default는 'COVEREDRATIO'
                minimum = 0.30
            }
        }

        rule {
            // 룰을 간단히 켜고 끌 수 있다.
            enabled = true

            // 룰을 체크할 단위는 클래스 단위
            element = 'CLASS'

            // 브랜치 커버리지를 최소한 50% 만족시켜야 한다.
            limit {
                counter = 'BRANCH'
                value = 'COVEREDRATIO'
                minimum = 0.50
            }

            // 커버리지 체크를 제외할 클래스들
            excludes = [
                    '*.test.*',
            ]
        }
    }

 

element

  • BUNDLE (default): 패키지 번들
  • PACKAGE: 패키지
  • CLASS: 클래스
  • SOURCEFILE: 소스파일
  • METHOD: 메서드

counter

  • LINE: 빈 줄을 제외한 실제 코드의 라인 수
  • BRANCH: 조건문 등의 분기 수
  • CLASS: 클래스 수
  • METHOD: 메서드 수
  • INSTRUCTION (default): Java 바이트코드 명령 수
  • COMPLEXITY: 복잡도

value

  • TOTALCOUNT: 전체 개수
  • MISSEDCOUNT: 커버되지 않은 개수
  • COVEREDCOUNT: 커버된 개수
  • MISSEDRATIO: 커버되지 않은 비율. 0부터 1 사이의 숫자로, 1이 100%입니다.
  • COVEREDRATIO (default): 커버된 비율. 0부터 1 사이의 숫자로, 1이 100%입니다.

Default values of the jacoco in test task

test {
    jacoco {
        enabled = true
        destinationFile = layout.buildDirectory.file("jacoco/${name}.exec").get().asFile
        includes = []
        excludes = []
        excludeClassLoaders = []
        includeNoLocationClasses = false
        sessionId = "<auto-generated value>"
        dumpOnExit = true
        classDumpDir = null
        output = JacocoTaskExtension.Output.FILE
        address = "localhost"
        port = 6300
        jmx = false
    }
}
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.