코드 커버리지
란 소프트웨어의 테스트 수준이 충분하지를 표현하는 지표
커버리지를 확인하기 위해 가장 보편적으로 사용하는 도구가 JaCoCo(Java Code Coverage)
-> JUnit 테스트를 통해 애플리케이션의 코드가 얼마나 테스트 되었는지 Line,Branch를 기준으로 한 커버리지로 리포트
런타임으로 테스트 케이스를 실행하고 커버리지를 체크하는 방식으로 동작하며, 리포트는 HTML, XML,CSV와 같은 형식으로 확인 가능
의존성 추가
<dependency>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.7</version>
</dependency>
플러그인 설정(< build > 태그 내 추가)
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.7</version>
<configuration>
<excludes>
<exclude>**/ProductServiceImpl.class</exclude>
</excludes>
</configuration>
<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>
</plugin>
Configuration 태그의 설정은 일부 클래스를 커버리지 측정 대상에서 제외하는 것
경로와 무관하게 ProductServiceImpl.class를 커버리지 측정 대상에서 제외하였음
기본적으로 < goal > 을 포함하며
, 설정한 값에 따라 추가 설정이 필요한 내용을 < configuration > 과 < rule > 을 통해 작성
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
: Refactor 내의 여러 프로젝트에서 구조화된 보고서를 생성, 보고서는 해당 프로젝트가 의존하는 모듈에서 생성check
: 코드 커버리지의 메트릭 충족 여부 검사, 메트릭이란 테스트 커버리지를 측정하는데 필요한 지표, 이는 check가 설정된 < execution > 태그 내 < rule > 을 통해 설정dump
: TCP 서버 모드에서 실행중인 JaCoco 에이전트에서 TCP/IP를 통한 덤프 생성instrument
: 오프라인 측정을 수행하는 명령restore-instrumeneted-class
: 원본 파일 저장 기능< configuration >
태그 안에 설정
Element
는 코드 커버리지를 체크하는데 필요한 범위 기준 설정
BUNDLE은 Element를 기준으로 < limit> 태그 내 < counter> 과 < value > 를 활용해 커버리지 측정 단위와 방식 설정
Counter
는 커버리지를 측정하는 데 사용하는 지표
Value 태그
로는 커버리지 지표 설정
//<confiugration> 태그 안
<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>
패키지 번들 단위로 바이트코드 명령 수를 기준으로 커버리자가 최소한 80프로 달성하는것을 Limit으로 설정
메서드 단위로 전체 라인 수를 최대 50라인줄로 설정하였음
-> 기준들을 벗어날 시 에러 발생
JaCoCo plugin으로 테스트 커버리지를 측정하려면 메이븐의 테스트 단계가 선행되어야 함
메이븐 생명 주기에서 JaCoCo는 test 단계 뒤에 있는 package 단계에서 실행 가능
package를 더블 클릭해서 빌드를 진행하면 타겟 폴더네에 폴더가 생성됨
HTML 파일열면 리포트 결과 확인가능
초록색
은 테스트에서 실행되었단 의미, 빨간색
은 실행되지 않은 라인 의미
조건문
의 경우 true,false에 대한 모든 케이스가 테스트 되면 초록색, 둘중 하나만 되었다면 노란색