코드 커버리지란
- 테스트 코드가 프로덕션 코드를 얼마나 실행했는지를 백분율로 나타내는 지표
- 테스트 코드가 실제 프로덕션 코드를 몇 퍼센트 검증하고 있는지를 나타낸다.
- 코드 커버리지의 중요성은 테스트 코드의 중요성과 일맥상통
구문(Statement)
- 라인 커버리지
- 코드 한 줄이 한 번 이상 실행된다면 충족
조건 (Condition)
- 모든 조건식의 내부 조건이 true/false을 가지게 되면 충족
- 각 내부 조건 참 혹은 거짓을 가지면 충족
결정 (Decision)
- 브랜치 커버리지
- 모든 조건식이 true/false를 가지게 되면 충족
- 각 분기의 내부조건 자체가 아닌 전체의 결과가 참 혹은 거짓을 가지면 충족
Jacoco
- Jacoco는 Java 코드의 커버리지를 체크하는 라이브러리
- 테스트 코드를 돌리고 그 커버리지 결과를 html, xml, csv 같은 리포트로 생성
- 테스트 결과가 내가 설정한 커버리지 기준을 만족하는지 확인
적용법
plugins {
id("jacoco")
}
tasks.jacocoTestReport {
dependsOn(tasks.test)
reports {
html.required.set(true)
xml.required.set(false)
csv.required.set(false)
}
finalizedBy(tasks.jacocoTestCoverageVerification)
}
tasks.jacocoTestCoverageVerification {
dependsOn(tasks.jacocoTestReport)
violationRules {
rule {
element = "CLASS"
limit {
counter = "LINE"
value = "COVEREDRATIO"
minimum = "0.90".toBigDecimal()
}
excludes = listOf(
"com.guide.Application"
)
}
}
}
test task 실행 시 Jacoco task 실행하도록 설정
tasks.test {
useJUnitPlatform()
finalizedBy(tasks.jacocoTestReport)
}
tasks.jacocoTestReport {
dependsOn(tasks.test)
finalizedBy(tasks.jacocoTestCoverageVerification)
}
- test task가 실행될 때 마다 자동으로 jacocoTestReport task와 jacocoTestCoverageVerification task가 순서대로 실행
사용법
./gradlew jacocoTestCoverageVerification
: 커버리지 기준을 지키는지 확인
./gradlew jacocoTestReport
: 커버리지 리포트를 생성
Jacoco Report 확인하기
- 경로 :
build/reports/jacoco/test/html/index.htm
Reference