새소식

반응형
Development

[DevOps] jacoco 코드 커버리지

  • -
반응형

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

java code coverage의 약자로 ja co co 

 

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

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

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

 

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

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

 

  • 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%입니다.
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 } }
반응형

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

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