JaCoCo로 테스트 코드 수행 시 테스트가 필요없는 부분들도 커버리지에 잡히기 때문에 제외할 필요를 느꼈다.
제외할 클래스 범위로는 다음과 같이 잡았다.
1. 제외할 클래스 excludes 추가
- @SpringBooTest가 붙은 클래스
- 각종 Config 클래스
- Dto 클래스
- Request/Response 클래스
- Interceptor
- Exception
- QueryDSL 사용하기 위해 만들어지 Q도메인 클래스
위에있는 클래스 말고도 제외가 필요한 클래스는 각각 추가해주었다. QDomain의 경우 클래스 이름이 Q+대문자로 시작하기 때문에 그걸 특징으로 삼아 제외할 클래스에 추가해주었다.
jacocoTestReport에는 분석 리포트 생성 시 특정 파일들을 제외하기 위해서 defQdomains = [] 부터 afterEvaluate 쪽을 추가해주었다. 코드를 보면 이해가 될 것 이다.
jacocoTestCoverageVerification에는 검증을 제외할 클래스들을 excludes에 추가해주었다. 여기서도 QDomain들을 포함해서 제외하였다.
build.gradle
jacocoTestReport {
dependsOn test
reports {
html.enabled true
xml.enabled true
csv.enabled true
html.destination file("src/jacoco/jacoco.html")
xml.destination file("src/jacoco/jacoco.xml")
}
def Qdomains = []
for (qPattern in '**/QA'..'**/QZ') {
Qdomains.add(qPattern + '*')
}
afterEvaluate {
classDirectories.setFrom(
files(classDirectories.files.collect {
fileTree(dir: it, excludes: [
"**/*Application*",
"**/*Config*",
"**/*Dto*",
"**/*Request*",
"**/*Response*",
"**/*Interceptor*",
"**/*Exception*"
] + Qdomains)
})
)
}
finalizedBy 'jacocoTestCoverageVerification'
}
jacocoTestCoverageVerification {
def Qdomains = []
for (qPattern in '*.QA'..'*.QZ') {
Qdomains.add(qPattern + '*')
}
violationRules {
rule {
element = 'CLASS'
enabled = true
limit {
counter = 'LINE'
value = 'COVEREDRATIO'
minimum = 0.60
}
limit {
counter = 'BRANCH'
value = 'COVEREDRATIO'
minimum = 0.60
}
excludes = [
"**.*Application*",
"**.*Config*",
"**.*Dto*",
"**.*Request*",
"**.*Response*",
"**.*Interceptor*",
"**.*Exception*"
] + Qdomains
}
}
}
2. Lombok
Lombok을 사용할 때 getter,builder 메소드 등을 쉽게 사용할 수 있는데 테스트 범위에서 제외해야했다.
루트 폴더 아래에 lombok.config 파일을 만들고 아래 옵션을 추가해주자. 처음에 resources 폴더 아래에 저 파일을 생성하고 왜 적용이 안됐나 너무 뻘짓을 많이했다. 생성 위치를 주의하자!!
lombok.addLombokGeneratedAnnotation = true
REFERENCE
https://xlffm3.github.io/devops/jacoco-sonarcube/
'Test' 카테고리의 다른 글
JUnit5 테스트 병렬 실행 (2) | 2021.12.01 |
---|---|
코드 커버리지 적용(2) - JaCoCo (0) | 2021.11.30 |
코드 커버리지 적용(1) - 커버리지란? (0) | 2021.11.30 |
Mockito && 스프링부트 테스트 관련 어노테이션 정리 (0) | 2021.11.17 |
무엇을 어떻게 테스트할 것인가 (feat : 권용근님) (0) | 2021.11.17 |