그동안 Kotlin을 사용하면서 Java의 도구들을 코틀린 도구들로 변경해서 사용했습니다.
회사에서는 SonarQube의 클라우드 버전인 SonarCloud를 사용하여 정적 코드 분석을 사용하고 있었습니다.
코드 품질 중 코드 커버리지는 JaCoCo의 XML 테스트 리포트를 이용하여 제공을 하고 있었습니다.
가끔 테스트를 할 수 없는 부분이나 이미 테스트가 완료되었음에도 커버가 안된다는 분석이 나와서 의아함을 느끼고 있었습니다.
JaCoCo 오탐들
Spring Boot의 애플리케이션을 수행하는 부분 코드를 보면 닫는 괄호 부분도 커버가 안된다고 JaCoCo에서는 표시가 됩니다.
또한 Java에는 없고 Kotlin에만 있는 value class도 어떤 경우는 테스트가 되고 있음에도 안되고 있다고 잘못 측정이 되는 경우가 잦았습니다.
Kover
그러던 중 코틀린 언어를 만든 JetBrains에서 만든 Kover라는 Coverage 측정 도구를 알게 되었습니다.
동일한 코드를 도구만 바꾸어서 측정을 해보니 좀 더 정확하게 표시되는 것을 알 수 있었습니다.
프로젝트에는 gradle 플러그인을 적용해서 수행했고 koverHtmlReport 태스크를 실행하여 생성하는 build/reports/kover/html/index.html 문서로 확인이 가능합니다.
main 함수부분:
value class:
샘플 코드
관련한 코드는 아래 github에서 확인할 수 있습니다.
SonarCloud 연동은?
만약 소나 클라우드 연동을 한다면 기존에 JaCoCo에서 XML로 출력을 하던 리포트를 Kover의 XML 리포트로 변경해주면 됩니다.
"koverXmlReport" 작업
다만 기존의 report가 생기는 경로가 달라지므로 "sonar.coverage.jacoco.xmlReportPaths" 프로퍼티의 값을 프로젝트의 적절한 위치로 바꾸어줄 필요가 있습니다.
sonar {
properties {
property("sonar.coverage.jacoco.xmlReportPaths", "${projectDir}/build/reports/kover/report.xml")
// ...
}
}
'Programing > JVM(Java, Kotlin)' 카테고리의 다른 글
실패하는 테스트부터 만들기 패턴 (0) | 2023.10.31 |
---|---|
Java 17 으로 업데이트할 이유가 하나 더 생겼다. (0) | 2023.08.07 |
[Kotlin] byte[]을 String으로 바꾸기 (0) | 2022.03.17 |
@NotNull이 Needs Work가 필요한 수준인가요? (0) | 2021.08.09 |
System.out 의 성능? (0) | 2021.04.21 |