728x90
코틀린으로 만들어진 스프링부트 프로젝트에서 jacoco를 추가하는 방법을 알아보자.
1. JaCoCo란?
JaCoCo(Java Code Coverage)는 자바 프로그램의 코드 커버리지를 측정하기 위한 오픈 소스 도구이다. 코드 커버리지는 테스트가 코드의 몇 퍼센트를 실행하는지를 측정하는 지표이다. JaCoco로 다음과 같은 작업을 수행할 수 있다.
코드 커버리지 분석
- JaCoCo는 어떤 코드가 테스트되었는지, 어떤 코드가 테스트되지 않았는지를 보여준다. 이를 통해 테스트가 부족한 부분을 찾아낼 수 있다.
리포트 생성
- JaCoCo는 HTML, XML, CSV 등 다양한 형식의 리포트를 생성하여 커버리지 결과를 시각적으로 제공한다.
CI/CD 통합
- JaCoCo는 Jenkins, GitLab CI/CD 등 다양한 지속적 통합 및 배포 도구와 쉽게 통합될 수 있다. 이를 통해 빌드 파이프라인에서 자동으로 커버리지 리포트를 생성할 수 있다.
테스트 품질 향상
- JaCoCo를 사용하면 테스트의 품질을 높이고, 중요한 코드가 테스트되지 않는 상황을 방지할 수 있다.
2. Kotlin + SpringBoot 프로젝트에 JaCoCo 추가하기
build.gradle.kts에 다음과 같이 작성 혹은 추가한다.
plugin {
id("jacoco") // jacoco 추가
}
tasks.withType<Test> {
useJUnitPlatform()
finalizedBy("jacocoTestReport") // 테스트 후에 JaCoCo 리포트 생성
}
tasks.jacocoTestReport {
dependsOn(tasks.test) // 테스트 후에 JaCoCo 리포트 생성
reports {
xml.required.set(true)
html.required.set(true)
}
}
JUnit5 관련 내용도 추가한다.
dependencies {
// JUnit5
testImplementation("org.junit.jupiter:junit-jupiter-api:5.10.0")
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.10.0")
testImplementation("org.springframework.boot:spring-boot-starter-test") {
exclude(group = "junit", module = "junit") // JUnit4 의존성 제외
exclude(group = "org.mockito", module = "mockito-core") // Mockito 1.x 제외
}
}
전체 build.gradle.kts는 다음과 같다.
더보기
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
id("org.springframework.boot") version "3.2.3"
id("io.spring.dependency-management") version "1.1.4"
kotlin("jvm") version "1.9.22"
kotlin("plugin.spring") version "1.9.22"
kotlin("plugin.jpa") version "1.9.22"
id("jacoco")
}
group = "com.capston"
version = "0.0.1-SNAPSHOT"
java {
sourceCompatibility = JavaVersion.VERSION_17
}
configurations {
compileOnly {
extendsFrom(configurations.annotationProcessor.get())
}
}
repositories {
mavenCentral()
}
dependencies {
implementation("org.springframework.boot:spring-boot-starter-data-jpa")
implementation("org.springframework.boot:spring-boot-starter-validation")
implementation("org.springframework.boot:spring-boot-starter-web")
implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
implementation("org.jetbrains.kotlin:kotlin-reflect")
// JWT
implementation("io.jsonwebtoken:jjwt-api:0.11.2")
runtimeOnly("io.jsonwebtoken:jjwt-impl:0.11.2")
runtimeOnly("io.jsonwebtoken:jjwt-jackson:0.11.2")
// Security
implementation("org.springframework.boot:spring-boot-starter-security")
// JUnit5
testImplementation("org.junit.jupiter:junit-jupiter-api:5.10.0")
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.10.0")
compileOnly("org.projectlombok:lombok")
runtimeOnly("com.mysql:mysql-connector-j")
annotationProcessor("org.projectlombok:lombok")
testImplementation("org.springframework.boot:spring-boot-starter-test") {
exclude(group = "junit", module = "junit") // JUnit4 의존성 제외
exclude(group = "org.mockito", module = "mockito-core") // Mockito 1.x 제외
}
}
tasks.withType<KotlinCompile> {
kotlinOptions {
freeCompilerArgs += "-Xjsr305=strict"
jvmTarget = "17"
}
}
tasks.withType<Test> {
useJUnitPlatform()
finalizedBy("jacocoTestReport") // 테스트 후에 JaCoCo 리포트 생성
}
tasks.jacocoTestReport {
dependsOn(tasks.test) // 테스트 후에 JaCoCo 리포트 생성
reports {
xml.required.set(true)
html.required.set(true)
}
}
tasks {
val bootJar by getting(org.springframework.boot.gradle.tasks.bundling.BootJar::class) {
archiveFileName.set("app.jar")
}
}
3. Report 생성과 확인
Report 생성 : IntelliJ 오른쪽 Gradle 탭 - Tasks - verification - jacocoTestReport
Report 확인 : build/reports/test/index.html
728x90
'TIL' 카테고리의 다른 글
[hELLO 스킨 css 편집] 이미지가 본문 영역을 벗어날 때 (0) | 2024.05.28 |
---|---|
[BadSqlGrammarException] StatementCallback; bad SQL grammar [TRUNCATE TABLE members] (0) | 2024.05.21 |
[Ubuntu] git에서 SpringBoot 프로젝트 받아오고 jar 파일 빌드 후 Script 로 jar 파일 배포하기 (0) | 2024.02.11 |
[JPA] @CreatedDate와 @LastModifiedDate (0) | 2024.01.13 |
[SpringBoot] 에러 응답 형식 통일 (0) | 2024.01.02 |