코드 커버리지 적용(3) - 커버리지 제외
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
좌충우돌 jacoco 적용기
스터디 블로그 코드블럭 상태가 이상해서 먼저 여기에 올린당.. 좌충우돌 Jacoco 적용기 백기선님의 더 자바 강의를 보던 중 바이트 코드를 다루는 방법의 예시로 jacoco가 언급되었고 테스트 커버
bottom-to-top.tistory.com
코드 분석 도구 적용기 - 2편, JaCoCo 적용하기
이 글은 우아한테크코스에서 진행한 프로젝트인 직고래의 기술 블로그에 함께 게시된 글입니다. 안녕하세요. 우아한테크코스 2기, 셀러리 컴퍼니에서 직고래를 개발하고 있는 스티치(이준영)입
velog.io
https://xlffm3.github.io/devops/jacoco-sonarcube/
Gradle 프로젝트에 JaCoCo & SonarQube 적용
코드 커버리지를 포함한 정적 분석 리포트를 생성해보자.
xlffm3.github.io