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>의 속성값
- help
- jacoco-maven-plugin에 대한 도움말
- prepare-agent
- 테스트 중인 애플리케이션에 VM 인수를 전달하는 JaCoCo 런타임 에이전트의 속성을 준비한다.
- 에이전트는 maven-surefire-plugin을 통해 테스트한 결과를 가져오는 역할을 수행한다.
- prepare-agent-integration
- prepare-agent와 유사하지만, 통합 테스트의 적합한 기본값을 제공한다.
- merge
- 실행 데이터 파일 세트(.exec)를 단일 파일로 병합한다.
- report
- 단일 프로젝트 테스트를 마치면 생성되는 코드 검사 보고서를 다양한 방식(HTML, XML, CSV) 중에서 선택할 수 있게 한다.
- report-integration
- report와 유사하나 통합 테스트에 적합한 기본값을 제공한다.
- report-aggregate
- Reactor 내의 여러 프로젝트에서 구조화된 보고서(HTML, XML, CSV)를 생선한다.
- 보고서는 해당 프로젝트가 의존하는 모듈에서 생성된다.
- check
- 코드 커버리지의 메트릭 충족 여부를 검사한다.
- 메트릭은 테스트 커버리지를 측정하는 데 필요한 지표를 의미한다.
- 메트릭은 check가 설정된 <execution> 태그 내에서 <rule>을 통해 설정한다.
- dump
- TCP 서버 모드에서 실행 중인 JaCoCo 에이전트에서 TCP/IP를 통한 덤프를 생성한다.
- instrument
- 오프라인 측정을 수행하는 명령이다.
- 테스트를 실행한 후에 restore-instrumented-classes Goal로 원본 클래스 파일들을 저장해야한다.
- restore-instrumented-class
- 오프라인 측정 전 원본 파일을 저장하는 기능을 수행한다.
⚙ <rule>의 속성값
- Element : 코드 커버리지를 체크하는 데 필요한 범위의 기준을 설정한다.
- BUNDLE(기본값) : 패키지 번들(프로젝트 내 모든 파일)
- Default 값은 BUNDLE이다.
- Element를 기준으로 <limit> 태그 내에 <counter>와 <Value>를 활용해 커버리지 측정 단위와 방식을 설정
- PACKAGE : 패키지
- CLASS : 클래스
- GROUP : 논리적 번들 그룹
- SOURCEFILE : 소스 파일
- METHOD : 메서드
- BUNDLE(기본값) : 패키지 번들(프로젝트 내 모든 파일)
- Counter : 커버리지를 측정하는 데 사용하는 지표
- LINE : 빈 줄을 제외한 실제 코드의 라인 수
- BRANCH : 조건문 등의 분기 수
- CLASS : 클래스 수
- METHOD : 메서드 수
- INSTRUCTION(기본값) : 자바의 바이트코드 명령 수
- COMPLEXITY : 복잡도, 복잡도는 맥케이브 순환 복잡도 정의를 따른다.
- Value : 커버리지 지표를 설정한다.
- TOTALCOUNT : 전체 개수
- MISSEDCOUNT : 커버되지 않은 개수
- COVERDCOUNT : 커버된 개수
- MISSEDRATIO : 커버되지 않은 비율
- COVEREDRATION(기본값) : 커버된 비율
반응형
댓글