테스트 커버리지 확인하기
Jacoco
코드 커버리지
소프트웨어의 테스트 수준이 충분한지 표현할 수 있는 지표 중 하나
테스트를 진행했을 때 해당 코드가 실행되었는지를 표현하는 방법
많은 코드 커버리지 도구가 있으며, 가장 보편적으로 사용되는 Jacoco에 대해 다룬 강의
Jacoco 란?
Java 코드의 커버리지를 체크하는 라이브러리
작성된 코드의 테스트 커버리지(Test Coverage)를 측정하는 도구
Runtime으로 Test Case를 싱행하여 Coverage를 체크하는 방식으로 사용됨
테스트 코드를 통해 테스트를 실행하고 그 결과를 html,xml,csv등의 형식으로 Report를 제공
블랙 박스 테스트(Black Box Test)
소프트웨어의 내부 구조나 작동원리를 모르는 상태에서 동작을 검사하는 방식
다양한 값을 입력하여 올바른 출력이 나오는지 테스트
사용자 관점의 테스트 방법
화이트 박스 테스트(White Box Test)
소프트웨어의 내부 구조와 동작을 검사하는 테스트 방식
소프트웨어 내부 소스 코드를 테스트하는 방법
개발자 관점의 테스트 방법
Jacoco pom.xml 파일 설정
Execution 내부에 사용되는 값
prepare-agent
.테스트중인 어플리케이션에서 인수를 전달하는 Jacoco
Runtime Agent에 대한 property를 준비
merge : 여러 실행 데이터 파일들을 하나로 통합하는 명령어
report : 하나의 프로젝트 테스트에 대한 Code Coverage 리포트를 생성하는 명령어
check : code coverage metric이 충될하는지 확인하는 명령어
Jacoco Rule
Element type - 코드 커버리지 체크 기준
BUNDLE(default): 패키지 번들
PACKAGE : 패키지
CLASS : 클래스
SOURCEFILE : 소스 파일
METHOD : 메소드
Counter - 코드 커버리지를 측정할 때 사용하는 지표
LINE : 빈 줄을 제외한 실제 코드의 라인 수
BRANCH : 조건문 등의 분기 수
CLASS : 클래스 수
METHOD : 메소드 수
INSTRUCTION(defatult) : Java 바이트 코드 명령 수
COMPLEXITY : 복잡도
Value - 커버리지 정도를 나타내는 지표
TOTALCOUNT : 전체 개수
MISSEDCOUNT : 커버되지 않은 개수
COVEREDCOUNT : 커버된 개수
MISSEDRATIO : 커버되지 않은 비율(0~1)
COVEREDRATIO(default) : 커버된 비율(0~1)
Jacoco 설정 예시
특정 클래스를 테스트 대상에서 제외하기 위해 아래와 같이 설정
(configuration)
(excludes)
(exclude)DeleteController.class(/exclude)
(/excludes)
(/configuration)
// ()가아니라 <> 이거입니다.
<rule>을 기준으로 총 2개의 측정 기준이 제시된 예제
상단의 <rule> 의미
-패키지 번들 단위로 바이트 코드 명령 수에 40%미만일 경우 에러 발생
하단의 <rule> 의미
-메소드 라인 수가 30을 초과할 경우 에러 발생
Maven의 라이프 사이클
compile -> test -> package -> install -> deploy
Jacoco 플로그인은 Maven 라이프 사이클에 의해 동작하며, test phase 이후에 측정이 가능함
-package phase 이후로 동작 가능