[spring] jacoco 테스트 항목 제외하기 By starseat 2023-08-31 10:43:23 java/spring Post Tags **jacoco Test Coverage** 에 제외 항목을 설정하는 방법을 공유하고자 한다. `gradle` 을 사용을 하고 있어 `build.gradle` 파일에 설정 방법을 추가한다. 먼저 적당한 위치에 아래 항목을 추가 한다. ### 제외 대상 선언 ```gradle // 제외 대상을 담을 배열 선언 def jacocoExcludes = [] // querydsl Q-Class for (qPattern in "**/QA".."**/QZ") { jacocoExcludes.add(qPattern + "*") } // 제외 시킬 각종 설정, Uilt 등의 클래스들 jacocoExcludes.add("**/*Config*") jacocoExcludes.add("**/*Mapper*") jacocoExcludes.add("**/*Factory*") jacocoExcludes.add("**/*Exception*") ``` ### test 제외 `test` 영역에서 아래 항목을 추가 한다. ```gralde test { jacoco { destinationFile = file("$buildDir/jacoco/jacoco.exec") // test 시 jacoco 제외 항목 추가 excludes += jacocoExcludes } ... } ``` ### jacoco report 제외 ```gradle jacocoTestReport { ... // jacoco report 에서 제외 afterEvaluate { classDirectories.setFrom(files(classDirectories.files.collect { fileTree(dir: it, exclude: jacocoExcludes) })) } } ``` ### jacoco 영역 전체 예제 ```gradle ... // 제외 대상을 담을 배열 선언 def jacocoExcludes = [] // querydsl Q-Class for (qPattern in "**/QA".."**/QZ") { jacocoExcludes.add(qPattern + "*") } // 제외 시킬 각종 설정, Uilt 등의 클래스들 jacocoExcludes.add("**/*Config*") jacocoExcludes.add("**/*Mapper*") jacocoExcludes.add("**/*Factory*") jacocoExcludes.add("**/*Exception*") test { jacoco { destinationFile = file("$buildDir/jacoco/jacoco.exec") // test 시 jacoco 제외 항목 추가 excludes += jacocoExcludes } systemProperty 'spring.profiles.active', 'gradle-test' useJUnitPlatform() reports { junitXml.destination(file("$buildDir/reports/test/test/junitXml")) junitXml.enabled(true) html.destination(file("$buildDir/reports/test/test/html")) html.enabled(true) } finalizedBy 'jacocoTestReport' } // jacoco jacoco { toolVersion = '0.8.10' } jacocoTestReport { reports { html.enabled true xml.enabled true csv.enabled false xml.destination file("$buildDir/reports/jacoco/jacoco.xml") } finalizedBy 'jacocoTestCoverageVerification' // jacoco report 에서 제외 afterEvaluate { classDirectories.setFrom(files(classDirectories.files.collect { fileTree(dir: it, exclude: jacocoExcludes) })) } } jacocoTestCoverageVerification { violationRules { rule { // 'element'가 없으면 프로젝트의 전체 파일을 합친 값을 기준 limit { counter = 'INSTRUCTION' minimum = 0.8 } } } } 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']) } ... ``` Previous Post [java] java 정규식 사이트 소개 Next Post [java] 대량 데이터 나눠서 저장하기 (Chunk)