본문 바로가기

DDD/도메인 주도 설계 철저 입문

테스트 커버리지 높이는 법 - 「도메인 주도 설계 철저 입문」 11장 (3)

 

 

jacoco 플러그인 세팅

`build.gradle` 파일에 다음과 같은 내용들을 추가한다. 

plugins {
    id 'jacoco'
}

tasks.named('test') {
    finalizedBy(jacocoTestReport)
}

jacoco {
    toolVersion = "0.8.12"
}

test {
    useJUnitPlatform()
    finalizedBy jacocoTestReport
}

jacocoTestReport {
    dependsOn test
    reports {
        xml.required = false
        csv.required = false
        html.outputLocation = layout.buildDirectory.dir('jacocoHtml')
    }
}

 

추가 후의 build.gradle 파일은 다음과 같다. 

plugins {
    id 'java'
    id 'org.springframework.boot' version '3.2.11'
    id 'io.spring.dependency-management' version '1.1.6'
    id 'jacoco'
}

group = 'com.woojoovove'
version = '0.0.1-SNAPSHOT'

java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(19)
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}

tasks.named('test') {
    finalizedBy(jacocoTestReport)
}

jacoco {
    toolVersion = "0.8.12"
}

test {
    useJUnitPlatform()
    finalizedBy jacocoTestReport
}

jacocoTestReport {
    dependsOn test
    reports {
        xml.required = false
        csv.required = false
        html.outputLocation = layout.buildDirectory.dir('jacocoHtml')
    }
}

 

 

테스트 실행

`./gradlew jacocoTestReport` 명령어를 실행한다. 만약 테스트 리포트가 생성이 되지 않는 등 기대한 결과값이 나오지 않는다면 `./gradlew jacocoTestReport --info`를 실행하여 로그를 확인하면 된다. 

 

 

테스트 리포트 확인하기

`CircleId` 클래스의 테스트 커버리지가 80%로 나오는데 그 이유는 equals 메소드 때문이다. 

equals() 메소드의 특정 케이스에 대해 테스트가 되지 않고 있다고 한다. 

 

 

테스트 코드 수정

실제로 다른 클래스의 객체와 비교하는 테스트 케이스가 없어 다음과 같이 추가해주었다. 

    @Test
    public void returnFalseWhenComparedWithDifferentClass() {
        CircleId circleId = new CircleId("circleId");
        CircleName differentObj = new CircleName("circleName");
        assertNotEquals(circleId, differentObj);
    }

 

그럼에도 여전히 동일한 부분이 MissedBranch로 지목되어 null과 비교하는 경우에 대해 `assertNotEquals(null, circleId)`였던 것을 `assertNotEquals(circleId, null)`로 다음과 같이 바꾸니 100%로 나온다. 

    @Test
    public void returnFalseWhenComparedWithNull() {
        CircleId circleId = new CircleId("circle");
        assertNotEquals(circleId, null);
    }