심화과제 추가 요건 사항으로 Jacoco 를 적용하고 테스트 커버리지를 높이는 것이 있어
설정하고, 확인하는 방법을 쓰려고합니다.
우선 적용한 환경입니다.
- SpringBoot 3.1.5
- Gradle: 8.4
JaCoCo 플러그인 추가하기
build.gradle에서 JaCoCo 플러그인을 추가하고 설정합니다.
plugins {
id 'jacoco'
... 다른 플러그인 id
}
jacoco {
// JaCoCo 버전
toolVersion = "0.8.9"
// 테스트결과 리포트를 저장할 경로 변경
// default는 "${project.reporting.baseDir}/jacoco"
// reportsDir = file("$buildDir/customJacocoReportDir")
}
Gradle Task 설정 - 테스트 레포트 설정과 커버리지 체크 설정
JaCoCo 플러그인에는 jacocoTestReport 와 jacocoTestCoverageVerification task 가 존재합니다.
- jacocoTestReport: 커버리지 테스트 결과를 다양한 포맷(html, csv ,xml)의 리포트로 저장합니다.
- jacocoTestCoverageVerification: 원하는 커버리지 기준을 만조가는지 확인하는 task입니다.
달성해야할 커버리지 수치와 기준을 설정할 수 있습니다.
jacocoTestReport
//Jacoco 레포트 설정
jacocoTestReport {
dependsOn test // test task 실행 시 해당 task도 실행됩니다.
reports {
// 원하는 리포트를 켜고 끌 수 있습니다.
xml.required = false
csv.required = false
//html 생성 위치를 정합니다. /build/jacocoHtml/index.html 로 생성됩니다.
html.outputLocation = layout.buildDirectory.dir('jacocoHtml')
// 각 리포트 타입 마다 리포트 저장 경로를 설정할 수 있습니다.
// html.destination file("$buildDir/jacocoHtml")
// xml.destination file("$buildDir/jacoco.xml")
}
def Qdomains = [] //QueryDsl Q도메인 패턴입니다.
for (qPattern in '**/QA'..'**/QZ') {
Qdomains.add(qPattern + '*')
}
afterEvaluate {
classDirectories.setFrom(files(classDirectories.files.collect {
fileTree(dir: it, exclude: [ //테스트 레포트 제외 대상입니다.
"**/*Application*",
"**/*Config*",
"**/*Dto*",
"**/*Response*",
"**/*Interceptor*",
"**/*Exception*",
"**/*Filter*"
] + Qdomains)
}))
}
finalizedBy 'jacocoTestCoverageVerification'
}
보시는바와 같이 reports 설정과, report 대상을 특정할 수 있습니다.
jacocoTestCoverageVerification
jacocoTestCoverageVerification { //테스트 커버리지 측정 관련 설정입니다.
def Qdomains = [] //QueryDsl Q도메인 제외 패턴
for (qPattern in '*.QA'..'*.QZ') {
Qdomains.add(qPattern + '*')
}
violationRules {
rule {
element = 'CLASS'
enabled = true
limit { //커버리지 측정 기준 라인 수 60% 이상
counter = 'LINE'
value = 'COVEREDRATIO'
minimum = 0.60
}
excludes = [ //측정 제외 목록
"**.*Application*",
"**.*Config*",
"**.*Dto*",
"**.*Response*",
"**.*Interceptor*",
"**.*Exception*",
"**.*Filter*"
] + Qdomains
}
}
}
아래는 rule 관련 정리한 내용입니다.
element
Coverage의 기준이 되는 값입니다.
BUNDLE
: DefaultPACKAGE
CLASS
SOURCEFILE
METHOD
counter
아래의 조건으로 코드를 수치화 합니다.
INSTRUCTION
: Default, Java 바이트 코드 명령 수 입니다.LINE
: 빈 줄을 제외한 라인 수BRANCH
: 조건 문 등의 분기 수CLASS
: 클래스 수METHOD
: 메소드 수COMPLEXITY
: 복잡도(계산법)
위의 설정을 다 하시면 test task 실행시 jacoco html이 만들어집니다.
test -> jacocoTestCoverageVerificiation -> jacocoTestReport 순으로 task 가 진행되게 됩니다.
작업이 끝나면
jacocoHtml/index.html 이생성되게 됩니다.
해당 파일을 열어주시면
테스트 코드의 커버리지를 확인할 수 있습니다.
'프로그래밍 > ETC' 카테고리의 다른 글
[기술면접] TCP/UDP 의 차이 (0) | 2024.01.11 |
---|---|
Mac M1 에서 Jmeter 설치하고 테스트하기 (4) | 2024.01.10 |
[기술면접] SQL, NoSQL 장단점 (0) | 2024.01.05 |
[PostgreSQL] 알아두면 좋은 기본 명령어 (0) | 2023.12.13 |
[Nginx] SSE 통신할 때, Connection Timeout.. (0) | 2023.11.14 |