사이드프로젝트 정리3 (Jacoco 설정)
JaCoCo란?
Jacoco는(Java Code Coverage)로 자바 코드 커버리지를 체크하는데 사용하는 오픈소스 라이브러리 입니다.
테스트 코드를 돌리고, 설정한 퍼센트만큼 커버하지 못한다면 빌드를 못하게끔 막을 수 있습니다.
적용한 이유는 제가짠 코드들이 어느정도 까지 커버를 하는지 궁금해서 적용시켜보았고, 어떤 코드가 필요가 없는지 눈으로 쉽게 파악하기 위해서 적용시켜 보았습니다.
적용하기
plugins{
id 'jacoco'
}
jacoco {
toolVersion = '0.8.7'
}
jacocoTestReport {
reports {
html.enabled true
xml.enabled true
csv.enabled false
// 각 리포트 타입 마다 리포트 저장 경로를 설정할 수 있다.
html.destination file("$buildDir/jacocoHtml")
xml.destination file("$buildDir/jacoco.xml")
}
finalizedBy 'jacocoTestCoverageVerification'
}
jacocoTestCoverageVerification {
violationRules {
rule {
enabled = true
element = 'CLASS'
// includes = []
limit {
counter = 'LINE'
value = 'COVEREDRATIO'
minimum = 0.60
}
excludes = []
}
}
}
- plugin에 jacoco를 추가해 줍니다
- jacoco 버전을 추가해줍니다
- jacocoTestReport는 테스트 결과를 설정하는 부분으로 다양항 형태의 파일 타입으로 받을 수 있습니다.
여기서 finalizedBy는 테스트가 먼저 실행되고 나서 리포트 작성을 하게끔 하기 위해서 입니다 - jacocoTestCoverageVerification 은 커버리지 수준을 저으이 하는 부분입니다.
커버리지 퍼센트(소수점) 이나, counter등의 설정을 할 수 있습니다.
- enable : rule 활성화를 설정
- element : 커버리지에서가장 큰 측정 단위입니다.(PACKAGE, CLASS, SOURCEFILE, METHOD가 있습니다)
- counter : 커버리지의 최소 측정 단위입니다.(CLASS, METHOD, LINE, BRACH 있습니다)
- value : 측정한 정보를 보여주는 방식을 설정합니다(TOTALCOUNT, COVEREDCOUNT, COVEREDRATIO 있습니다)
- exclude : 커버리지 검증에서 제외할 클래스를 지정합니다(패키지레벨 경로입니다)
실행은 다음과 같은 명령어로 하면 됩니다(터미널에서 해당 프로젝트의 gradlew 가 있는 위치에서 실행시키면 됩니다)
./gradlew --console verbose test jacocoTestReport jacocoTestCoverageVerification
--console verbose : 실행되는 과정을 콘솔에서 볼 수 있습니다.
보시면 빌드에 실패한 것을 확인 할 수 있습니다. 이유는?
이런식으로 위에서 설정한 커버리지에 만족하지 못했기 때문입니다.
결과는 제가 설정한 경로에 따르면 build -> jacocoHtml 에서 확인할 수 있습니다.
맨 아래 index.html 파일을 누르면 전체 적인 커버 스토리지를 볼 수 있습니다.
보면 빨간색이 굉장히 많은데 저게 다 커버가 안됬다는 뜻입니다 ㅠㅠ
exclude 부분에 커버리지에 측정할 필요가 없는 더미데이터 부분을 추가해 놓지 않아서 그러한 부분까지 모두 측정되어 나온 것 같습니다(라고 위안을 삼습니다 ㅠㅠ)
그리고 여러 task를 한번에 실행 시킬 수 있습니다.
task testCoverage(type: Test) {
group 'verification'
description 'Runs the unit tests with coverage'
dependsOn(':test',
':jacocoTestReport',
':jacocoTestCoverageVerification')
tasks['jacocoTestReport'].mustRunAfter(tasks['test'])
tasks['jacocoTestCoverageVerification'].mustRunAfter(tasks['jacocoTestReport'])
}
이렇게 적어주게 되면 jacocoTestReport와 jacocoTestCoverageVerification 를 한번에 지정해 줄 수 있습니다. 리포트 생성 후 -> 커버리지를 체크한다는 뜻입니다. 확인하면
보시면 TestReport 생성 후 coverateVerification이 실행됨을 알 수 있습니다.
혹시나 테스트 없이 빌드가 필요한 경우 다음과 같은 명령어로 빌드 할 수 있습니다.
./gradlew clean build -x test
-x test 는 테스트 없이 바로 클린 빌드 하겠다는 뜻 입니다.
Author And Source
이 문제에 관하여(사이드프로젝트 정리3 (Jacoco 설정)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kurikuri/사이드프로젝트-정리3-Jacoco-설정저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)