Code Coverage
코드 커버리지
Intro
JaCoCo는 Java 코드의 커버리지를 체크하는 라이브러리이다.
테스트 코드를 돌리고 그 커버리지의 결과를 확인할 수 있도록 html, xml, csv 같은 리포트로 생성할 수 있다.
그리고 테스트의 결과를 내가 직접 설정한 커버리지 기준을 만족하는 지 확인할 수 있다.
커버리지의 결과를 통해서 개발된 프로젝트를 배포할 지 말지의 기준을 정할 수도 있다.
JaCoCo 플러그인 추가
Gradle 설정에 JaCoCo 플러그인 추가
플러그인 설정을 추가할 수도 있다.
Gradle task 설정
테스트 리포트 저장 및 커버리지 체크
바이너리 커버리지 결과를 html 파일로 생성하여 눈으로 확인 가능
xml, csv 타입으로 내리는 경우 SonarQube 등과 연동도 가능하다.
jacocoTestCoverageVerification
커버리지 기준을 만족하는지 확인해 주는 task이다.
프로젝트에 적용 및 테스트 실행
Junit5로 작성한 테스트 코드에 대한 커버리지 테스트
리포트 생성(
jacocoTestReport
) 및 커버리지 체크(JacocoTestCoverageVerification
)를 실행task 실행을 확인하기 위한 파라미터 추가(
--console verbose
)
커버리지 체크 확인
커버리지 설정의 기준에 미치지 못해서 경고 표시나는 클래스
만들어진 리포트를 확인
코드 파일에서 커버가 된 라인은 초록색 놓친 부분은 빨간색으로 표시
단순하게 등록 테스트만 했기 때문에 save() 메서드만 초록색이고 나머지는 빨간색
노란색을 false에 대한 테스트만 이루어졌고 true에 대한 테스트가 이루어지지 않았기 때문이다.
여러 Task를 함께 실행하기 위한 방법
jacocoTestReport
task와jacocoTestCoverageVerification
task를 지정해주기 위한 task 생성testCoverage의 내용은 dependsOn으로
test
,jacocoTestReport
,jacocoTestCoverageVerification를
실행한다고 설정mustRunAfter
를 통해서 실행 순서를 정렬한다.정렬 기준은
test
먼저 실행, 그 결과로 리포트를 생성(jacocoTestReport
), 커버리지가 원하는 기준 도달했는지 체크(jacocoTestCoverageVerification
)한다.여기서 test -> jacocoTestReport -> jacocoTestCoverageVerification 의 순서를 지켜서 리포팅된 결과로 커버리지를 체크하지 않고 테스트된 결과를 리포팅되지 않은
결과를 커버리지 체크하는 문제를 일으키지 않도록 한다.
tasks 묶인거 확인
test task 실행 시 JaCoCo task 실행하도록 설정
testCoverage task를 test task를 실행할 때마다 자동으로 JaCoCo task 들이 실행되도록 finalizedBy로 설정
커버리지의 기준을 설정
커버리지의 설정은
jacocoTestCoverageVerification
task의 상세에서 설정한다.이 task는 설정해 둔 커버리지 기준을 만족하는 코드를 짰는지 확인 할 수 있다.
violationRules
로 커버리지 기준을 설정하는rule
을 정의
커버리지의 체크 기준이 되는
element
element | 설명 |
BUNDLE(default) | 패키지 번들 |
PACKAGE | 패키지 |
CLASS | 클래스 |
SOURCEFILE | 소스파일 |
METHOD | 메서드 |
couter 설정
counter | 설명 |
LINE | 빈 줄을 제외한 실제 코드의 라인 수 |
BRANCH | 조건문 등의 분기 수 |
CLASS | 클래스 수 |
METHOD | 메서드 수 |
INSTRUCTION (default) | Java 바이트코드 명령 수 |
COMPLEXITY | 복잡도 |
value 설정
value | 설명 |
TOTALCOUNT | 전체 개수 |
MISSEDCOUNT | 커버되지 않은 개수 |
COVEREDCOUNT | 커버된 개수 |
MISSEDRATIO | 커버되지 않은 비율. 0부터 1 사이의 숫자로, 1이 100% |
COVEREDRATIO (default) | 커버된 비율. 0부터 1 사이의 숫자로, 1이 100% |
Last updated