인프런 커뮤니티 질문&답변

Roeniss Moon님의 프로필 이미지

작성한 질문수

Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트

테스트 추가하기: h2를 이용한 repository 테스트

실습1의 커버리지 관련 설명이 잘 이해되지 않습니다

24.07.10 02:44 작성

·

141

0

"테스트 추가하기: h2를 이용한 repository 테스트" 편의 10:39 에서, "잘 커버된 것 같아요"라는 말을 하셨는데 이 상황을 이해하기가 어렵습니다.

  1. PostEntity 와 관련된 테스트가 없는데 PostEntity 의 라인 14%가 충족되었다고 나옵니다. 이런저런 이유로 그냥 채워지는 경우도 있습니다만, 하단의 첨부 사진과 같이 제 화면에서는 0%로 보입니다. 혹시 이 차이가 왜 발생하는지 아시나요? (저는 temurin-17, IntelliJ Ultimate 2014.1.4 을 쓰고 있습니다) UserEntity 에도 동일한 질문을 드릴 수 있을 것 같습니다.

  2. UserRepository 인터페이스는 메서드가 존재하는데 0개 있다고 표기되고 있습니다 ("0/0"). 왜 이렇게 나오는지 아시나요?

  3. UserRepository 는 사실상 아무 메서드도 없다고 판단되었기 때문에 커버리지가 100% 로 나온 듯 합니다. 그 위의 PostRepository 도 (테스트가 없는데) 100% 로 나왔으니 그렇게 해석하는게 맞는듯 합니다. 따라서 이 대목에서 커버리지가 아무것도 측정되지 않은 것 같습니다. (위 1,2 질문의 대답에 따라 달라질수도 있겠지만) 여기까지 제가 이해한게 맞을까요?

sh.moon 2024-07-10 at 02.38.46@2x.png

답변 1

0

인프런 AI 인턴님의 프로필 이미지

2024. 07. 11. 02:46

안녕하세요, 인프럁 AI 인턴입니다.

님의 질문에 대해 답변드리겠습니다.

  1. PostEntity와 관련된 테스트가 없음에도 불구하고 PostEntity의 라인 커버리지가 표시되는 현상은, 코드의 일부가 다른 과정에서 실행되면서 커버리지에 반영된 경우일 수 있습니다. 특히, JPA를 사용하고 이를 통한 리포지토리 테스트 시 자동 생성된 쿼리가 실행되면서 연관된 엔티티의 코드가 부분적으로 실행될 수 있습니다. 이는 사용하는 개발 환경(IntelliJ, JUnit 버전 등)과 프로젝트의 특정 설정에 따라 차이를 보일 수 있습니다.

  2. UserRepository 인터페이스에 메서드가 실제로 존재하지만 “0/0”으로 표시되는 상황은, 인터페이스 자체에 대한 실제 테스트 케이스가 없거나 실행되지 않았을 때 발생할 수 있습니다. 인터페이스는 구현된 메서드를 가지고 있지 않으므로 직접적인 실행 커버리지를 가질 수 없고, 구현 클래스나 그 사용 사례를 통한 간접적 커버리지에 의존합니다.

  3. UserRepositoryPostRepository가 테스트 없이도 100% 커버리지를 보이는 것은, 실제 테스트가 이들의 구현체나 사용처에서 간접적으로 수행되었을 수 있음을 의미합니다. 또는 테스트 환경 설정이나 테스트 실행 방법에 따라 기본적으로 일부 커버리지가 계산될 수 있습니다.

JUnit 및 스프링 부트 테스트 관련 설정을 확인하시고, 테스트 커버리지 정확도를 향상시키려면 구체적인 테스트 케이스를 추가하거나, 기존 테스트 케이스의 범위를 확장하는 것이 좋습니다. 또한, 개발 도구의 테스트 커버리지 측정 방법을 검토하여 보다 정확한 분석을 위한 설정 조정이 필요할 수 있습니다.