KOTLIN · 테스트
코드 커버리지 (Code Coverage)
테스트가 코드를 얼마나 실행하는지 측정합니다. 라인, 분기, 조건 커버리지의 차이를 이해합니다.
테스트중급coveragejacocobranch-coverageline-coverage
핵심 설명
테스트가 코드를 얼마나 실행하는지 측정합니다. 라인, 분기, 조건 커버리지의 차이를 이해합니다.
Kotlin code
// 테스트 대상
fun classify(score: Int): String = when {
score < 0 || score > 100 -> throw IllegalArgumentException("점수 범위 초과")
score >= 90 -> "A"
score >= 80 -> "B"
score >= 70 -> "C"
score >= 60 -> "D"
else -> "F"
}
// 커버리지 측정 시뮬레이션
class CoverageTracker {
private val branches = mutableMapOf<String, Boolean>()
fun track(branch: String, hit: Boolean) {
branches[branch] = branches.getOrDefault(branch, false) || hit
}
fun report() {
val total = branches.size
val covered = branches.count { it.value }
println("분기 커버리지: $covered/$total (${covered * 100 / total}%)")
branches.filter { !it.value }.forEach {
println(" 미실행: ${it.key}")
}
}
}
fun main() {
val tracker = CoverageTracker()
val testInputs = listOf(95, 85, 75, 65, 50)
// 누락: 범위 초과 케이스
val allBranches = listOf("범위초과", "A등급", "B등급", "C등급", "D등급", "F등급")
allBranches.forEach { tracker.track(it, false) }
testInputs.forEach { score ->
val grade = classify(score)
tracker.track("${grade}등급", true)
println("점수 $score → $grade")
}
println("
=== 커버리지 리포트 ===")
tracker.report()
println("
→ '범위초과' 분기 테스트가 필요합니다!")
}학습 팁
JaCoCo를 Gradle에 추가하면 자동으로 커버리지를 측정하고 리포트를 생성합니다. jacocoTestReport 태스크를 사용하세요.
주의할 점
100% 라인 커버리지가 모든 버그를 잡는 것은 아닙니다. 분기 커버리지와 뮤테이션 테스트를 함께 활용하여 테스트 품질을 높이세요.
자주 묻는 질문
코드 커버리지 (Code Coverage)란 무엇인가요?
테스트가 코드를 얼마나 실행하는지 측정합니다. 라인, 분기, 조건 커버리지의 차이를 이해합니다.
코드 커버리지 (Code Coverage) 학습 시 주의할 점은 무엇인가요?
100% 라인 커버리지가 모든 버그를 잡는 것은 아닙니다. 분기 커버리지와 뮤테이션 테스트를 함께 활용하여 테스트 품질을 높이세요.
Continue Learning
Kotlin 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.