[스프링부트 #11] TEST #3 - JaCoCo 적용

김지현·2023년 12월 6일
0

JaCoCo란 java의 코드 커버리지를 체크하는 라이브러리이다. 프로젝트 코드 커버리지 (테스트 코드 적용률)을 측정하고 퍼센테이지로 확인할 수 있도록 리포트를 생성한다. 또한 커버리지의 기준을 설정하여 해당 기준에 미치지 못할 경우 bulid가 불가능하도록 설정하는 것도 가능하다. 이전에 만들어둔 Post Board 프로젝트에 JaCoCo를 적용해보았다.

환경

  • JUnit5
  • JDK 17
  • Spring Boot 3.1.5
  • IDE : Intellij

bulid.gradle

Gradle 설정에 JaCoCo 플러그인을 추가하면 의존성이 추가된다.

plugins {
  id 'jacoco'
}

JaCoCo Gradle 플러그인에는 jacocoTestReport와 jacocoTestCoverageVerification task가 있다. 이를 통해 리포트의 저장 형식과 커버리지의 기준 퍼센테이지를 설정할 수 있다.

jacocoTestReport : 커버리지 결과 리포트 설정
jacocoTestCoverageVerification : 커버리지 기준 설정

jacocoTestReport {
  reports {
    // 원하는 리포트를 켜고 끌 수 있습니다.
    html.enabled true
    xml.enabled false
    csv.enabled false

	// 리포트 타입마다 리포트 저장 경로를 설정할 수 있습니다.
  	html.destination file("jacoco/jacocoHtml")
	xml.destination file("jacoco/jacoco.xml")
  }
}

jacocoTestCoverageVerification {
  // 커버리지의 범위와 퍼센테이지를 설정합니다.
  violationRules {
    rule {
      element = 'CLASS'		// class 단위로 룰을 체크합니다.

	// 브랜치 커버리지의 최소값을 설정합니다.
      limit {
        counter = 'BRANCH'
        value = 'COVEREDRATIO'
        minimum = 0.80
      }
    }
  }
}

JaCoCo Report

이렇게 기본 설정을 완료한 후 실행시켜주면 커버리지 리포트를 확인할 수 있다.

  1. 우선 Gradle 탭을 열고 jacoco -> verificaion -> test 에서 전체 test를 실행한다.
  2. 다음으로 jacocoTestRepost 를 누르면 해당 테스트 결과로 리포트가 생성된다.
  3. 커버리지가 원하는 기준에 도달했는지 체크하기 위해 jacocoTestCoverageVerification 까지 눌러주자.

결과 리포트는 gradle에서 설정한 경로에 생성된다. index.html 파일을 열어주면 커버리지 퍼센트를 확인할 수 있다.

해당 리포트에서 세부 내용을 확인하면 각각의 메서드에 대한 커버리지 퍼센트까지 자세히 볼 수 있으며 코드에서 색깔로도 확인 가능하다. 빨간색은 커버하지 못한 부분, 노란색은 100프로 커버하지 못한 부분, 초록색은 완벽하게 커버된 부분을 나타낸다.

JaCoCo 테스트 제외

커버리지를 확인하고 싶지 않은 코드가 있을 경우 gradle 또는 해당 클래스나 메서드에서 직접 설정하여 제외시켜줄 수 있다.

  1. bulid.gradle 설정
jacocoTestCoverageVerification {
	violationRules {
    ...(생략)
    excludes = [
           '*.ErrorResult',
           '*.jwt.*'
      ]   
   }
}
  1. 클래스 또는 메서드에 lombok의 @Generated 애너테이션으로 설정
@Generated
public class jwtUtil {
}

참고
https://techblog.woowahan.com/2661/
https://learnote-dev.com/java/jacoco-%EC%A0%81%EC%9A%A9%ED%95%98%EC%97%AC-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%BB%A4%EB%B2%84%EB%A6%AC%EC%A7%80-%EC%B2%B4%ED%81%AC%ED%95%98%EA%B8%B0/

0개의 댓글