[Java] 내 테스트 코드는 제대로 작성되었을까? (with. 코드 커버리지)

pgmjun·2023년 11월 14일
15

java

목록 보기
1/3

내 테스트 코드는 제대로 작성되었을까? 🤔

우테코 프리코스를 진행하면서 요구사항에 의해 테스트 코드를 작성하였다.
실수를 방지하기 위해 정말 꼼꼼하게 테스트 코드를 작성하며, 엣지 케이스를 찾기 위해 열심히 노력하였다.

하지만 미션 코드가 길어지다보니 "모든 로직에 대한 테스트가 되어있는가?"라는 스스로에 대한 의구심이 들기 시작했다.

때문에 이 의구심을 해결하기 위한 방법을 찾아보았고, 인텔리제이에서 플러그인 설치없이 코드 커버리지를 측정을 할 수 있다는 것을 알 수 있었다.

나는 이를 활용해 최대한 모든 로직을 테스트 할 수 있었고, 몇 번의 클릭만으로 많은 장점을 얻을 수 있다고 생각했기 때문에 이를 공유하고자 간단히나마 글을 작성해보고자 한다.


💭 코드 커버리지란?

코드 커버리지는 내 프로젝트의 코드들의 테스트 코드에서 사용된 정도백분율(%)로 나타낸 것이다.
이를 확인함으로써 내가 테스트 코드를 작성하지 못한 부분이 존재하는지를 확인하며, 꼼꼼히 테스트를 작성할 수 있다.

이에 대해 자세히 학습하고자 한다면 아래 블로그를 참고하면 좋을 것 같아 함께 첨부한다.

IntelliJ 코드 커버리지 확인하기
코드 커버리지란?



커버리지 측정 방법 🔎

💡 먼저 이 글은 IntelliJ Ultimate 기준으로 작성되었음을 밝힌다.


Test 패키지를 오른쪽 마우스로 클릭하고, More Run/Debug를 선택한 다음
Run 'Tests in '...' with Coverage를 클릭한다.


그럼 인텔리제이는 코드를 분석하여 백분율로 코드의 Coverage를 출력해준다.



더 정확한 Coverage 확인법 🕵️‍♂️

인텔리제이는 브랜치 커버리지(Branch Coverage) 측정 방식을 지원하여,
위보다 더욱 정확하고 세밀하게 Coverage를 측정할 수 있도록 돕는다.

💡 브랜치 커버리지(Branch Coverage)란?
브랜치 커버리지는 조건문(if, else if, else)에서 각 조건(branch)이 실행되었는지를 검증한다.

예를 들어 if(조건1 || 조건2 || 조건3)과 같은 조건식이 존재할 때,
3개의 조건에 대해 true인 경우와 false인 경우를 각각 측정한다고 알고 있다.



⚙️ 설정 방법

Test 패키지를 오른쪽 마우스로 클릭하고, More Run/Debug를 선택한 다음
Modify Run Configuration을 클릭한다.


우측에 존재하는 Modify options를 클릭한다.


Code Coverage 탭에 있는 Enable branch coverage and test tracking을 선택한다.

버전에 따라 Use tracking 이라고 나와있을 수도 있다고 한다.


그럼 이렇게 Branch Coverage에 대한 결과를 얻을 수 있는데,
이렇게 확인하니 아직 테스트 면에서 부족한 부분이 드러났다.



🤔 그럼 문제의 위치는 어떻게 파악하는데?

100%로 측정되지 않은 클래스에 접근하여 좌측 코드라인을 살펴보면 이렇게
녹색갈색이 표시되는 것을 확인할 수 있다.

테스트되지 않은 부분갈색, 테스트되는 부분녹색으로 표시되는 것이다.


이를 클릭해보면 테스트 코드 상에서 조건이 true였던 경우와 false였던 경우의 수가 출력되는데,
갈색인 부분은 결과값이 한 번도 true였던 적이 없었기 때문에, 이 클래스의 커버리지가 낮게 측정되었음을 확인할 수 있었다.



마치며 💭

이러한 과정을 통해 코드를 개선해나가면 더 안전하고 좋은 코드를 만들 수 있을 것이라고 생각한다.

테스트 코드가 제대로 작성되었는 지, 확인하고 싶다면 이 방법을 통해 측정해보는 것을 추천한다!

profile
하나씩 천천히 깊이있게 쌓아가는 백엔드 개발자 최승준입니다.

4개의 댓글

comment-user-thumbnail
2023년 11월 15일

잘 보구 갑니다 !

1개의 답글
comment-user-thumbnail
2023년 11월 15일

좋은 정보 감사합니다!
제 인텔리제이에서는 Enable branch coverage and test tracking 대신 Use tracking 이라고 되어 있었습니다!
버전 차이인가봐요! ㅎㅎ

1개의 답글