본문 바로가기

TDD

Jacoco

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퍼센트로 만듬

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

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

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

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

10) getProduct(Long)이 hit가 안됨

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

12) Controller는 제대로 호출됨 확인

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

)

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

15) 사이트에서 확인 → ProductService에서 hit가 안됨

17) 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);
}

18) ProductServiceTest 소스 수정 후 테스트 점검

@Test
@DisplayName("요청한 고양이 장난감을 반환한다.")
void existed_getProduct_return() {
    product = productService.getProduct(productId);
    assertThat(product)
    .extracting("id")
    .isEqualTo(productId);
}

19) 테스트 정상 확인

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

21) hit 확인

'TDD' 카테고리의 다른 글

Mockito  (0) 2021.06.09