Skip to main content Link Menu Expand (external link) Document Search Copy Copied

먼저, Jacoco 에 대해서 알려준 오석이 땡큐!!


Jacoco 란?

  • Java VM 기반 환경에서 코드 커버지리 분석을 위한 라이브러리이다.

코드 커버리지란?

소프트웨어의 테스트 케이스가 얼마나 충족되었는지를 나타내는 지표 중 하나이다.

  1. 라인 커버리지 : 코드 한 줄이 한 번 이상 실행된다면 충족된다.
  2. 결정 커버리지 : 브랜치 커버리지라고도 불린다. 모든 조건식의 내부 조건이 true/ false 를 가지게 되면 충족한다.
  3. 조건 커버리지 : if 조건문 안의 개별 조건식이 false 인경우와 true인 경우 모두 실행되었을 때 충족한다. 결정 커버리지보다 더 detail한 커버리지이다.


plugins {
	id 'java'
	id 'org.springframework.boot' version '2.7.5'
	id 'io.spring.dependency-management' version '1.0.15.RELEASE'

	//jacoco 테스트 커버리지 확인
	id 'jacoco'
}


plugin 에 위와같이 jacoco 를 추가해준다.



test {
	useJUnitPlatform()// JUnit5를 사용하기 위한 설정
	finalizedBy 'jacocoTestReport'  // Test 이후 커버리지가 동작하도록 finalizedBy 추가
}

jacoco {
	toolVersion = '0.8.8'
}

jacocoTestReport {
	dependsOn test
	reports {
		html.enabled true
		xml.enabled false
		csv.enabled false

		//리포트 위치 지정
		html.destination file('build/reports/myReport.html')

	}

	finalizedBy 'jacocoTestCoverageVerification'
}



// 검증 단계
jacocoTestCoverageVerification {
	violationRules {
		rule {
			enabled = true // 활성화
			element = 'CLASS' // 클래스 단위로 커버리지 체크
			includes = [
			        '**/restController*',
					'**/service'
			]

			// 라인 커버리지 제한을 80%로 설정
			limit {
				counter = 'LINE'
				value = 'COVEREDRATIO'
				minimum = 0.80
			}

			// 브랜치 커버리지 제한을 80%로 설정
			limit {
				counter = 'BRANCH'
				value = 'COVEREDRATIO'
				minimum = 0.80
			}

			// 빈 줄을 제외한 코드의 라인수를 최대 200라인으로 제한
			limit {
				counter = 'LINE'
				value = 'TOTALCOUNT'
				maximum = 200
			}
			
		}
	}
}


그리고 위 내용을 build.gradle 에 추가해준다.

element = 'CLASS'로 커버리지 카운터를 설정했다.


해당 프로젝트 경로로 git bash 터미널을 연 뒤,

./gradlew test

를 입력한다.

image-20230110155711626

위와 같이 리포트가 생성된다.

image-20230110155756982

설정한 대로 >build>reports>myReport.html 경로에 리포트가 생성된다.

리포트를 확인해서, 부족한 부분을 개선해서

image-20230110173510398

Controller 테스트는 구문 커버리지는 90%이상으로 잘 작성했다.

image-20230110210729377

서비스는 테스트 코드를 짤게 산더미다..ㅎㅎ

시간을 내서 완성해야겠다.


image-20230110211751704

그리고 validation 으로 바인딩 에러를 처리한 구문을 테스트 코드를 어떻게 짜야할지 아직 모르겠다..

이 부분도, 해결해봐야겠다.

참고 : https://percyfrank.github.io