
코드 커버리지란 소프트웨어의 테스트 수준이 충분하지를 표현하는 지표
커버리지를 확인하기 위해 가장 보편적으로 사용하는 도구가 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에 대한 모든 케이스가 테스트 되면 초록색, 둘중 하나만 되었다면 노란색