코드 커버리지 검증을 위해 codeCov를 설치해서 확인을 하고자 한다.
이를 위해서는 먼저 jacoco가 빌드되어 있어야한다.
JaCoCo는 Java코드의 테스트 커버리지를 측정하는 오픈소스 도구다.
테스트 실행 중 코드의 실행 여부를 추적하여 다양한 커버리지 지표를 제공한다.
jacoco plugin추가는 build.gradle공식문서에서 확인할 수 있다.
📂 build.gradle
plugins {
id 'jacoco'
}
test {
finalizedBy jacocoTestReport // report is always generated after tests run
}
jacocoTestReport {
dependsOn test // tests are required to run before generating the report
}
jacoco {
toolVersion = "0.8.12"
reportsDirectory = layout.buildDirectory.dir('customJacocoReportDir')
}
jacocoTestReport {
reports {
xml.required = false
csv.required = false
html.outputLocation = layout.buildDirectory.dir('jacocoHtml')
}
}

여기까지 하면 jacoco index.html에 가면,
이 폴더 파일에 대한 테스트 커버리지를 볼 수 있다.
CodeCov는 코드 커버리지 결과를 시각화하고 분석하는 웹 서비스다.
JaCoCo등의 도구를 생성한 커버리지 리포트를 바탕으로 코드품질을 모니터링할 수 있다.

CodeCov와 github를 연동하면, 내 레포지토리에 대한 coverage를 볼 수 있다.

token이 나오는데, 이 토큰으로



codecov공식문서 를 참고
coverage:
status:
project:
default: false
tests:
target: 50%
paths:
- "potatocountry/**/*"
이와같이 만들어주었다.
그런데, 중요한 이슈가 발생했다.
바로 PR에서는 코드커버리지가 만족이 안되면 오류가 뜨는데, push할 때는 오류가 뜨지 않는다는 것..!


push:
branches:
- main
- dev
pull_request:
branches:
- main
- dev
codecov를 측정하는 .yml파일에서 push & pull request 가 제대로 잘 들어가있기 때문에, 같은 코드에서 다른 결과값이 나왔다.
jacocoTestCoverageVerification {
violationRules {
rule {
element = 'CLASS'
limit {
counter = 'LINE'
value = 'COVEREDRATIO'
minimum = 0.5
}
}
}
}
test {
useJUnitPlatform()
ignoreFailures = false
finalizedBy jacocoTestReport
finalizedBy jacocoTestCoverageVerification
}
check.dependsOn jacocoTestCoverageVerification
이런 저런 방법을 써보다가, jacocoTestCoverageVerification에 rule을 강력하게 추가하고
finalizedBy jacocoTestCoverageVerification : 테스트 실행 후 커버리지 검증 강제check.dependsOn jacocoTestCoverageVerification : 빌드 프로세스에 커버리지 검증 통합으로 커버리지 검증 규칙을 추가했다.
이렇게 설정하니, Push를 하면 PR과 마찬가지로 오류가 뜨는 것을 확인했다.
이전 설정에서는 jacocoTestReport로 보고서만 생성이 되었기에 문제가 되었다.
PR에서는 Github Actions가 merge commit을 기준으로 실행되고, 이 과정에서 jacocoTestCoverageVerification이 자동으로 포함되어 검증이 수행되었지만, push에서는 merge commit기반 검증이 없어서 명시적인 verification설정이 필요했던 것이다.