diff --git a/backend/build.gradle b/backend/build.gradle index 4a5124840..0abfece95 100644 --- a/backend/build.gradle +++ b/backend/build.gradle @@ -4,11 +4,14 @@ plugins { id 'java' // RestDocs 관련 id 'org.asciidoctor.jvm.convert' version '3.1.0' + // jacoco + id 'jacoco' } group = 'com.darass' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' +targetCompatibility = '11' configurations { compileOnly { @@ -49,6 +52,10 @@ dependencies { test { useJUnitPlatform() + jacoco { + destinationFile = file("$buildDir/jacoco/jacoco.exec") + } + finalizedBy 'jacocoTestReport' } ext { @@ -72,4 +79,89 @@ asciidoctor.doLast { build { dependsOn asciidoctor +} + +jacoco { +// jaCoCo 버전 + toolVersion = '0.8.5' + + // 테스트 결과 리포트 파일 저장 경로 + reportsDir = file("$buildDir/customJacocoReportDir") +} + +jacocoTestReport { + reports { + // 원하는 리포트를 켜고 끌 수 있다. + html.enabled true + xml.enabled false + csv.enabled false + + // 각 리포트 타입 마다 리포트 저장 경로를 설정할 수 있다. + html.destination file("$buildDir/jacocoHtml") + // xml.destination file("$buildDir/jacoco.xml") + } + finalizedBy 'jacocoTestCoverageVerification' +} + +jacocoTestCoverageVerification { + violationRules { + rule { + // 'element'가 없으면 프로젝트의 전체 파일을 합친 값을 기준으로 한다. + // 위의 리포트에서 'Total'로 표시된 부분이다. + limit { + // 'counter'를 지정하지 않으면 default는 'INSTRUCTION' + // 'value'를 지정하지 않으면 default는 'COVEREDRATIO' + minimum = 0.30 + } + } + + // 여러 룰을 생성할 수 있다. + rule { + // 룰을 간단히 켜고 끌 수 있다. + enabled = true + + // 룰을 체크할 단위는 클래스 단위 + element = 'CLASS' + + // 브랜치 커버리지를 최소한 90% 만족시켜야 한다. + limit { + counter = 'BRANCH' + value = 'COVEREDRATIO' + minimum = 0.80 + } + + // 라인 커버리지를 최소한 80% 만족시켜야 한다. + limit { + counter = 'LINE' + value = 'COVEREDRATIO' + minimum = 0.80 + } + + // 빈 줄을 제외한 코드의 라인수를 최대 200라인으로 제한한다. + limit { + counter = 'LINE' + value = 'TOTALCOUNT' + maximum = 200 + } + // 커버리지 체크를 제외할 클래스들 + excludes = [ + // '*.test.*', + '*.Kotlin*' + ] + + } + } +} + + +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']) } \ No newline at end of file