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://bottom-to-top.tistory.com/36#30f14fdb731a343faba4d4c408780ae9:32f5cd06f6b63bf29c1f58dc2ecfcf8166d0215beff7decc75fbd0171c0a8f7f7447ee4c26d748567722fa4ed06924857127abdf615b6151729f1a117cb2f5b1

 

좌충우돌 jacoco 적용기

스터디 블로그 코드블럭 상태가 이상해서 먼저 여기에 올린당.. 좌충우돌 Jacoco 적용기 백기선님의 더 자바 강의를 보던 중 바이트 코드를 다루는 방법의 예시로 jacoco가 언급되었고 테스트 커버

bottom-to-top.tistory.com

https://velog.io/@lxxjn0/%EC%BD%94%EB%93%9C-%EB%B6%84%EC%84%9D-%EB%8F%84%EA%B5%AC-%EC%A0%81%EC%9A%A9%EA%B8%B0-2%ED%8E%B8-JaCoCo-%EC%A0%81%EC%9A%A9%ED%95%98%EA%B8%B0

 

코드 분석 도구 적용기 - 2편, JaCoCo 적용하기

이 글은 우아한테크코스에서 진행한 프로젝트인 직고래의 기술 블로그에 함께 게시된 글입니다. 안녕하세요. 우아한테크코스 2기, 셀러리 컴퍼니에서 직고래를 개발하고 있는 스티치(이준영)입

velog.io

https://xlffm3.github.io/devops/jacoco-sonarcube/

 

Gradle 프로젝트에 JaCoCo & SonarQube 적용

코드 커버리지를 포함한 정적 분석 리포트를 생성해보자.

xlffm3.github.io

 

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기