Jacoco

이진우·2021년 6월 9일
0
post-thumbnail

1. Java Code Coverage Lib


2. 확인 계기 및 과정

  1. pull request 이후 build 체크 시 에러가 발생한다고 메시지가 옴 → Details 버튼을 클릭하면 페이지 이동

  2. TestCase에서 영속성 초기화가 안되서 그런 것으로 생각하고 있었는데 맞는지 한번 확인해보기로 함 → ./gradlew.bat test jacocoTestCoverageVerification →ProductService 에서 1개의 line이 호출이 안 됬다고 리포팅 해줌

  3. 테스트 실패 나는 테스트부터 처리 하기로 함. → 웹으로 확인 → /app/build/reports/jacoco/tests/test/index.html 브라우저로 열기

  4. 2가지 케이스에 대해 실패 확인 → ProductRepository 쪽 소스임

  5. 문제가 되는 소스 제거 및 수정 하여 테스트 케이스 100퍼센트로 만듬

  1. 프로젝트의 root 폴더에서 명령어로 jacoco 확인 → 그래도 문제가 있음. → 역시나 동일한 ProductService에서 1개가 hit하지 않음

  2. /app/build/reports/jacoco/html/index.html 브라우저로 Open

  3. com.codesoom.assignment.application Package에서 Code Coverage가 84%임을 확인 → 클릭해서 들어가 보면 ProductService에서 91% Code Coverage임 을 확인

  4. ProductService 클릭 → getProduct(Long)이 호출이 안됨 → getProduct(Long) 클릭

  5. getProduct(Long)이 hit가 안됨

  6. 여기가 호출이 안된 건가? → **./gradlew.bat --info test jacocoTestCoverageVerification--**info 옵션으로 상세 확인

  7. Controller는 제대로 호출됨 확인

  8. Repository에서 호출이 BDD관계가 이상함을 발견 → { } (브라켓) 처리가 이상해서 수정 → 호출은 이상 없어 보임 → 수정 후 테스트 케이스 정상 확인



14. **./gradlew.bat --scan test jacocoTestCoverageVerification--scan** 옵션으로 Gradle사이트에서 확인 → 중간에 yes 누르면 사이트 주소 알려줌.

  1. 사이트에서 확인 → ProductService에서 hit가 안됨

  2. ProductServiceTest에서 getProduct 호출 부분 메서드 확인 → 발견 repository에서 호출했음.

@Test
@DisplayName("요청한 고양이 장난감을 반환한다.")
void existed_getProduct_return() {
	//productService.getProduct(productId); 가 호출 되었어야함
	Optional<Product> returnProduct = productRepository.findById(productId);
	assertThat(returnProduct.get())
	.extracting("id")
	.isEqualTo(productId);
}
  1. ProductServiceTest 소스 수정 후 테스트 점검
@Test
@DisplayName("요청한 고양이 장난감을 반환한다.")
void existed_getProduct_return() {
	product = productService.getProduct(productId);
	assertThat(product)
	.extracting("id")
	.isEqualTo(productId);
}
  1. 테스트 정상 확인

  2. .\gradlew.bat test jacocoTestCoverageVerification 다시 실행 → Build 성공

  3. hit 확인

profile
시작이 반이다.

0개의 댓글