반응형
코드 커버리지 관리의 필요성
- 테스트 코드를 열심히 작성하고 있었는데 하필 딱! 실수로 테스트 코드가 작성되지 않은 로직에 대한 변경이 발생했고, 이 변경으로 인해 부작용이 발생한다면?
코드 커버리지를 관리하게되면 이러한 불안감을 해소해준다.
코드 커버리지란?
- 테스트 케이스가 얼마나 충족 되었는지를 나타내는 지표
- 즉 테스트를 진행하였을 때
코드 자체가 얼마나 실행되었느냐
는 내용
커버리지 계산 ( 대표, 구문 커버리지 )
void test(int num) {
system.out.println(“a line”); // 1
if (num < 0) { // 2
system.out.println(“b line”); // 3
}
system.out.println(“c line”); // 4
}
- 코드 한 줄이 한 번 이상 실행된다면 충족된다.
- 즉 num을 양수(0이상)만 테스트를 한다면 if문 안의 구문 “b line”은 실행되지 않으므로 코드 커버리지는 3/4 * 100 = 75% ( 3번줄은 실행되지 않았으니까 )
자바 코드 커버리지 분석 도구 :: Jacoco
- 자바 코드 커버리지를 체크하는 데에 사용되는 오픈소스 라이브러리
- 선정 이유
- 레퍼런스가 많다.
- 사용방법이 간단하다
- 적용하기
- Maven plugin 추가
<plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>0.8.7</version> <configuration> <excludes> <!-- Exclude class from test coverage --> <exclude>**/*com/my/toyproject/*Application.class</exclude> </excludes> </configuration> <executions> <execution> <goals> <goal>prepare-agent</goal> </goals> </execution> <execution> <id>report</id> <phase>test</phase> <goals> <goal>report</goal> </goals> </execution> </executions> </plugin> <!-- 테스트 실패시에도 mvn 커맨드가 실패 처리되지 않도록 설정 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.22.2</version> <configuration> <testFailureIgnore>true</testFailureIgnore> </configuration> </plugin>
- Jacoco Execution Goal
- help: jacoco-maven-plugin의 도움말을 보여주는 명령입니다.
- prepare-agent: 테스트 중인 어플리케이션에서 인수를 전달하는 JaCoCo Runtime Agent에 대한 property를 준비하는 명령입니다.
- prepare-agent-integration: prepare-agent와 같은 기능을 하지만 integration test에 대해서 기본 설정 값들을 제공하는 명령입니다.
- merge: 여러 개의 실행 데이터 파일들을 하나의 파일들로 통합하는 명령입니다.
- report: 하나의 프로젝트의 테스트에 대한 code coverage 리포트를 생성하는 명령입니다.
- report-integration: report와 같은 기능을 하지만 integration test에 대해서 기본 설정 값들을 제공하는 명령입니다.
- aggregate: reacter 안에 있는 여러 프로젝트로부터 code coverage 리포트를 생성하는 명령입니다.
- check: code coverage metric이 충돌하는지 확인하는 명령입니다.
- dump: TCP 서버 모드에서 실행중인 JaCoCo Agent로부터 TCP/IP 덤프(dump)를 요청하는 명령입니다.
- instrument: 오프라인 측정을 수행하는 명령. 테스트 실행 후 ‘restore-instrumented-classes’ 명령으로 원본 클래스 파일들을 저장해야 합니다.
- restore-instrumented-class: 오프라인 측정 이전에 원본 파일들을 저장하는 명령입니다.
- Maven Jacoco lifecycle
- validate > compile > test > package > install > deploy
- test, phase 이후에 JaCoCo 플러그인에 의해 테스트 커버리지 측정이 가능하므로, package 이상부터 가능합니다.
- Jacoco 분석 결과
/target/site/jacoco/index.html
- 각 패키지별로 코드 커버리지가 나온다!!
728x90
반응형
'Tech > Test' 카테고리의 다른 글
Embedded MySQL를 이용해 테스트 환경 구축해보기 (0) | 2021.09.29 |
---|---|
JsonPath란? (0) | 2021.09.06 |
JUnit 5 공식 레퍼런스 (0) | 2021.08.25 |
Mockito vs BDDMockito (0) | 2021.08.12 |