3장, 단위 테스트 구조
단위 테스트, 블라디미르 코리코프 저/임준혁 역by otter2023년 1월 3일에 최종수정되었습니다.
잘못된 내용이 있으면 댓글을 달아주세요.
잘못된 내용이 있으면 댓글을 달아주세요.
📖 목차
이번 장의 목표
-
준비-실행-검증 패턴으로 작성된 단위 테스트의 구조 살펴보기
-
단위 테스트 명명법
좋지 않은 사례와 왜 좋은 선택이 아니었는지에 대해
-
단위테스트를 위한 프레임워크
단위 테스트 구성하기
AAA 패턴 (arrange - act - assertion)
AAA패턴은 각 테스트를 준비-실행-검증이라는 세 부분으로 나눈다.
const sum = (first, second) => { return first + second; }; describe("sum", () => { it("sum", () => { // arrange // 클래스였다면 여기서, 생성자를 만들어 주자 const first = 10; const second = 20; // act const result = sum(first, second); // assertion result.toBe(30); }); });
이렇게, AAA 패턴을 사용하는 방법은 모든 테스트를 단순화시키고 균일한 구조를 가지게 하는 데 도움이 된다. 특히 이러한 일관성을 통해 테스트 코드를 읽는 것이 쉬워진다. 결과적으로 전체 테스트의 유지 보수 비용이 줄어들 수 있다.
-
준비
테스트 대상 시스템과 해당 의존성을 원하는 상태로 만든다.
-
실행
메서드를 호출하고, 의존성을 전달하며 반환 값이 있다면 반환값을 갭쳐한다.
-
검증
결과를 검증한다.
→ given, when, then
으로도 표현할 수 있다.
피해야할 패턴 파악하기
여러 개의 준비, 실행, 검증 구문 피하기
때로 준비, 실행, 검증 구문이 여러 개 있는 테스트를 만날 수 있는데 이러한 테스트는 하나의 테스트가 너무 많은 것을 한번에 검증한다는 것을 의미한다.
→ 테스트를 나누어야 한다!
여기서 중요한 부분은 때때로 준비 - 검증 구문은 여러개일 수 있지만, 실행 구문일 경우 특히 조심해야 하고 테스트를 나누는게 좋지 않는지 고민해보아야 한다.
그럼에도, 실행 구문이 여러개일때가 괜찮은 경우도 있다.
- 시스템의 흐름 상 자연스러울 때 - 하나의 실행이 다른 실행의 후속실행이 되는 경우
If 문 피하기
if
문의 사용은 테스트가 한번에 너무 많은 것을 검증한다는 표시다. 이러한 테스트는 반드시 여러 테스트로 나누어야 한다. 테스트에 분기가 있어서 얻는 이점은 없고 읽기 어렵게 만든다.
→ if
문이 존재한다면 테스트를 나누자
각 구절은 얼마나 커야 하는가?
일반적으로 준비 구절이 가장 크다.