TEST/JaCoCo

JaCoCo를 활용한 테스트

블로그 주인장 2023. 11. 8.

JaCoCo를 활용한 테스트

커버리지를 확인하기 위한 도구 중 가장 보편적으로 사용되는 도구인 JaCoCo에 대해서 알아보겠습니다.


 

JaCoCo란?


  • JaCoCo는 Java Code Coverage 의 약자이다.
  • JUnit 테스트를 통해 애플리케이션의 코드가 얼마나 테스트 되었는지 Line과 Branch를 기준으로 한 커버리지로 리포트한다.
  • JaCoCo는 런타임으로 테스트 케이스를 실행하고 커버리지를 체크하는 방식으로 동작된다.
  • 리포트는 HTML, XML, CSV와 같은 다양한 형식으로 확인이 가능하다.

 

JaCoCo 플러그인 설정


의존성 주입(pom.xml)

<dependency>
    <groupId>org.jacoco</groupId>
    <artifactId>org.jacoco.cli</artifactId>
    <version>0.8.7</version>
</dependency>

 

플러그인 추가(pom.xml)

1️⃣ <configuration> 태그

<configuration>
    <excludes>
        <exclude>**/ProductServiceImpl.class</exclude>
    </excludes>
</configuration>
  • 일부 클래스를 커버리지 측정 대상에서 제외하는 것이다.
  • 경로와 무관하게 ProductServiceImpl.class를 커버리지 측정 대상에서 제외하도록 설정되어 있는 것이다.

 

2️⃣ <executions> 태그

<executions>
    <execution>
        <goals>
            <goal>prepare-agent</goal>
        </goals>
    </execution>
    <execution>
        <id>jacoco-report</id>
        <phase>test</phase>
        <goals>
            <goal>report</goal>
        </goals>
    </execution>
    <execution>
        <id>jacoco-check</id>
        <goals>
            <goal>check</goal>
        </goals>
        <configuration>
            <rules>
                <rule>
                    <element>BUNDLE</element>
                    <limits>
                        <limit>
                            <counter>INSTRUCTION</counter>
                            <value>COVEREDRATIO</value>
                            <minimum>0.80</minimum>
                        </limit>
                    </limits>
                    <element>METHOD</element>
                    <limits>
                        <limit>
                            <counter>LINE</counter>
                            <value>TOTALCOUNT</value>
                            <maximum>50</maximum>
                        </limit>
                    </limits>
                </rule>
            </rules>
        </configuration>
    </execution>
</executions>
  • <execution>은 기본적으로 <goal>을 포함하며, 설정한 값에 따라 추가 설정이 필요한 내용을 <configuration>과 <rule>을 통해 작성한다.

⚙ <goal>의 속성값

  1. help
    • jacoco-maven-plugin에 대한 도움말
  2. prepare-agent
    • 테스트 중인 애플리케이션에 VM 인수를 전달하는 JaCoCo 런타임 에이전트의 속성을 준비한다.
    • 에이전트는 maven-surefire-plugin을 통해 테스트한 결과를 가져오는 역할을 수행한다.
  3. prepare-agent-integration
    • prepare-agent와 유사하지만, 통합 테스트의 적합한 기본값을 제공한다.
  4. merge
    • 실행 데이터 파일 세트(.exec)를 단일 파일로 병합한다.
  5. report
    • 단일 프로젝트 테스트를 마치면 생성되는 코드 검사 보고서를 다양한 방식(HTML, XML, CSV) 중에서 선택할 수 있게 한다.
  6. report-integration
    • report와 유사하나 통합 테스트에 적합한 기본값을 제공한다.
  7. report-aggregate
    • Reactor 내의 여러 프로젝트에서 구조화된 보고서(HTML, XML, CSV)를 생선한다.
    • 보고서는 해당 프로젝트가 의존하는 모듈에서 생성된다.
  8. check
    • 코드 커버리지의 메트릭 충족 여부를 검사한다.
    • 메트릭은 테스트 커버리지를 측정하는 데 필요한 지표를 의미한다.
    • 메트릭은 check가 설정된 <execution> 태그 내에서 <rule>을 통해 설정한다.
  9. dump
    • TCP 서버 모드에서 실행 중인 JaCoCo 에이전트에서 TCP/IP를 통한 덤프를 생성한다.
  10. instrument
    • 오프라인 측정을 수행하는 명령이다.
    • 테스트를 실행한 후에 restore-instrumented-classes Goal로 원본 클래스 파일들을 저장해야한다.
  11. restore-instrumented-class
    • 오프라인 측정 전 원본 파일을 저장하는 기능을 수행한다.

 

⚙ <rule>의 속성값

  1. Element : 코드 커버리지를 체크하는 데 필요한 범위의 기준을 설정한다.
    • BUNDLE(기본값) : 패키지 번들(프로젝트 내 모든 파일)
      • Default 값은 BUNDLE이다.
      • Element를 기준으로 <limit> 태그 내에 <counter>와 <Value>를 활용해 커버리지 측정 단위와 방식을 설정
    • PACKAGE : 패키지
    • CLASS : 클래스
    • GROUP : 논리적 번들 그룹
    • SOURCEFILE : 소스 파일
    • METHOD : 메서드
  2. Counter : 커버리지를 측정하는 데 사용하는 지표
    • LINE : 빈 줄을 제외한 실제 코드의 라인 수
    • BRANCH : 조건문 등의 분기 수
    • CLASS : 클래스 수
    • METHOD : 메서드 수
    • INSTRUCTION(기본값) : 자바의 바이트코드 명령 수
    • COMPLEXITY : 복잡도, 복잡도는 맥케이브 순환 복잡도 정의를 따른다.
  3. Value : 커버리지 지표를 설정한다. 
    • TOTALCOUNT : 전체 개수
    • MISSEDCOUNT : 커버되지 않은 개수
    • COVERDCOUNT : 커버된 개수
    • MISSEDRATIO : 커버되지 않은 비율
    • COVEREDRATION(기본값) : 커버된 비율
반응형

댓글