---
1. Jacoco란?
Java Code Coverage의 줄임말 (JaCoCo)
Java, Kotlin 애플리케이션에서 테스트 코드가 실제로 소스 코드를 얼마나 실행했는지 측정하는 라이브러리
테스트를 돌렸을 때 → 어떤 클래스, 메서드, 라인, 분기가 실행되었는지 기록하고 → 보고서(HTML, XML, CSV)로 보여줍니다.
---
2. 왜 필요할까?
단위테스트가 충분히 작성되었는지 객관적으로 수치화
단순히 “테스트 통과”만으로는 부족 → 실제로 코드 커버리지를 봐야 테스트 범위 알 수 있음
QA, 감리, 팀 내 품질 지표로 활용 가능
Jenkins, SonarQube 같은 CI/CD 품질 게이트와 연동해 커버리지가 일정 % 미만이면 빌드 실패로 막을 수 있음
---
3. 커버리지 종류
JaCoCo는 여러 수준의 커버리지를 제공합니다:
1. Line Coverage (라인 커버리지)
실행된 소스 코드 줄 수 / 전체 코드 줄 수
가장 기본적인 지표
2. Branch Coverage (분기 커버리지)
if, switch, for, while 같은 분기문이 참/거짓 모두 실행됐는지 측정
예: if (x > 0) 코드가 있으면, x>0 과 x<=0 둘 다 테스트해야 100%
3. Method Coverage
정의된 메서드 중 몇 개가 호출되었는지
4. Class Coverage
전체 클래스 중 몇 개가 실행됐는지
---
4. 동작 방식
테스트 실행 시 JVM에 에이전트(Agent) 를 붙여서, 바이트코드 레벨에서 어떤 라인이 실행되는지 기록
테스트가 끝나면 .exec 파일에 기록 → jacocoTestReport 태스크로 HTML/XML 리포트 생성
---
5. Gradle 기본 설정 (build.gradle.kts)
plugins {
jacoco
}
tasks.test {
useJUnitPlatform()
}
jacoco {
toolVersion = "0.8.11" // 최신 안정 버전
}
tasks.jacocoTestReport {
dependsOn(tasks.test)
reports {
xml.required.set(true) // Jenkins 연동
html.required.set(true) // 로컬 확인용
}
}
실행:
./gradlew test jacocoTestReport
리포트 위치:
HTML: build/reports/jacoco/test/html/index.html
XML: build/reports/jacoco/test/jacocoTestReport.xml
---
6. 결과 해석
리포트에는 클래스별로 라인 커버리지/분기 커버리지/메서드 커버리지가 색깔로 표시
녹색: 테스트로 실행된 부분
빨강: 실행되지 않은 부분
예: UserService 클래스의 if문 한쪽만 테스트 → 라인 커버리지는 올라가도 분기 커버리지는 낮게 나옴
---
7. 보통 쓰는 방식
개발자: 로컬에서 확인하며 테스트 보강
CI: Jenkins/GitLab CI에서 자동 실행 → JaCoCo 리포트 생성 → SonarQube 같은 품질 도구가 “커버리지 <70% → 빌드 실패” 처리
QA/감리: 리포트를 근거 자료로 활용
---
✅ 정리
JaCoCo = 코드 커버리지 측정 도구
JUnit/Kotest 같은 테스트 프레임워크와 함께 사용
커버리지 지표(라인, 분기 등)를 리포트로 생성
CI 품질 관리/QA 증적에 많이 활용
---
@SpringBootTest
@AutoConfigureMockMvc
class UserControllerSmokeIT(
@Autowired val mockMvc: MockMvc
) {
@MockkBean
lateinit var dataConnector: DataConnector // 운영 Bean 대신 Mock으로 대체
@Test
fun `GET 사용자 조회 API가 200을 리턴한다`() {
// 외부 호출을 막고, 응답만 대충 리턴
every { dataConnector.fetchUser(any()) } returns User(1L, "Kim")
mockMvc.perform(get("/api/users/1"))
.andExpect(status().isOk)
.andExpect(content().contentType("application/json"))
}
}
'skill > Java.Kotlin' 카테고리의 다른 글
| Jacoco url 기준 테스트 (0) | 2025.09.16 |
|---|---|
| Jacoco 리포트 화면 (0) | 2025.09.16 |
| where in 조건 갯수 제한 (2) | 2025.07.30 |
| MinIO 403 오류 확인:access/secret key 정상 확인 (3) | 2025.07.28 |
| Kotlin UTC (3) | 2025.06.12 |