코드 커버리지란 애플리케이션의 test 코드가 본 코드를 얼마나 커버하고 있냐를 측정해주는 지표이다.
JaCoCo란 Java 코드의 코드 커버리지를 측정하는 라이브러리이다. 테스트를 실행하고, 그 결과를 html이나 csv, xml 파일을 통해서 시각화해준다.
결과에 대한 기준치를 설정할 수도 있다. 해당 커버리지가 사용자가 설정한 퍼센테이지에 미치지 못하면 build 자체가 되지 않게 설정하여 테스트 코드의 작성을 강제한다.
의존성 추가
plugins {
id '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

리포트 생성
Gradle에서 test, jacocoTestReport, jacocoTestCoverageVerification 명령을 순서대로 동작시켜 코드 커버리지를 생성할 수 있다. 각각의 명령은 테스트 코드를 실행하고(test), 리포트를 생성(jacocoTestReport)한 다음, 커버리지를 체크(jacocoTestCoverageVerification)한다.
jacocoTestCoverageVerification 실행 시 설정해둔 퍼센테이지에 미치지 못하면 에러가 뜨며 명령이 실행되지 않는다.
코드 커버리지 확인


