[테스트 마스터하기#3] 단위 테스트 구조

YoungHo-Cha·2022년 5월 26일
1

Testing

목록 보기
3/7

본 내용은 Unit Testing - 블라디미르 코리코프 도서를 읽고 정리한 내용입니다.

이번에는 다음을 공부하자

  • 단위 테스트의 구조
  • 단위 테스트 명명법

단위 테스트 구조

Given-When-Then 패턴

인프런의 김영한 개발자님이 소개해주신 패턴에 대해서 보자!
(책에서는 AAA 패턴을 자세히 소개한다.)

테스트를 3가지의 구절로 준비하자.

  1. Given : 준비 구절
  2. When : 실행 구절
  3. Then : 검증 구절

✅ 준비구절 : 테스트 대상 시스템과 해당 의존설을 원하는 상태로 만든다.
✅ 실행 구절 : SUT에서 메서드를 호출하고 준비된 의존성을 전달하며 출력 값을 캡처한다.
✅ 검증 구절 : 결과를 검증한다.

여러 개의 준비, 실행, 검증 구절 피하기

가령 다음과 같은 테스트는 피하도록 하자.

테스트 준비 -> 실행 -> 검증 -> 좀 더 실행 -> 다시 검증

이와 같은 상황이면 테스트를 나누어 해결하자.

테스트 내 if문 피하기

준비, 실행, 검증 구절이 나타나는 것과 비슷하기, if 문이 있는 단위테스트는 테스트가 한 번에 너무 많은 것을 검증한다는 표시다.

각 구절은 얼마나 커야 하나?

각 구절마다 지침이 존재한다.

준비 구절이 가장 큰 경우 : 일반적으로 준비 구절이 세 구절 중 가장 크다. 다만, 엄청나게 큰 경우는 같은 테스트 클래스 내 비공개 메서드 또는 별도의 팩토리 클래스로 도출하는 것이 좋다.

실행 구절이 한 줄 이상인 경우 경계하라 : 실행 구절은 보통 코드 한 줄이다.

단일 동작 단위는 여러 결과를 낼 수 있으며, 하나의 테스트로 그 모든 결과를 평가하는 것이 좋다. 하지만 검증 구절이 너무 커지는 것은 경계해야 한다.

단위 테스트 명명법

테스트에 표현력이 있는 이름을 붙이는 것은 중요하다. 올바른 명칭은 테스트가 검증하는 내용과 기본 시스템의 동작을 이해하는 데 도움이 된다.

❗️ 기존에 존재하는 [테스트 대상 메서드]_[시나리오]_[예상 결과]로 짓는 것은 동작 대신 구현 세부 사항에 집중하게끔 부추기기 때문에 분명히 도움이 되지 않는다.
ex) Sum_TwoNumbers_ReturnsSum

✅ 해답은 간단한 문구로 고객이나 도메인 전문가에게 의미 있는 방식으로 시스템 동작을 설명할 수 있어야 한다.
ex) Sum_of_two_numbers

두 예시로 보면 언뜻 위의 예가 좋아 보인다. 하지만 실제로 가독성에 좋은가? 전혀 아니다.

단위 테스트 명명 지침

  • 엄격한 명명 정책을 따르지 않는다.
  • 문제 도메인에 익숙한 비개발자들에게 시나리오를 설명하는 것처럼 테스트 이름을 짓자
  • 단어를 밑줄(_) 표시로 구분한다. (가독성을 위해)

참고

  • 도서 Unit Testing - 블라디미르 코리코프
profile
관심많은 영호입니다. 궁금한 거 있으시면 다음 익명 카톡으로 말씀해주시면 가능한 도와드리겠습니다! https://open.kakao.com/o/sE6T84kf

0개의 댓글