블라디미르 코리코프 님의 "단위 테스트" 책을 정리한 포스팅입니다.
1. 목과 스텁 구분
- 테스트 대상 시스템과 그 협력자 사이의 상호 작용을 검사할 수 있는 테스트 대역
목
- 외부로 나가는 상호 작용을 모방하고 검사하는 용도
- SUT가 상태를 변경하기 위한 의존성을 호출하는 상황
- ex) 메일 호출
스텁
- 내부로 들어오는 상호 작용을 모방하는 용도
- SUT가 입력 데이터를 얻기 위한 의존성을 호출하는 상황
- ex) 데이터베이스 조회
스텁으로 상호 작용을 검증하지 말라
- 스텁은 내부로 들어오는 상호 작용만 모방하고 검사하지 않음
- SUT에서 스텁으로의 호출은 SUT가 생성하는 최종 결과가 아님
- 최종 결과를 산출하기 위한 수단
- 내부 구현 세부 사항에 해당됨
- 이러한 호출을 검증하는 것은 테스트 취약성으로 이어질 수 있음 (과잉 명세)
CQS
- Command Query Separation
- 모든 메서드는 명령이거나 조회여야 함
명령
- 부작용이 있고, 반환값이 없음
- 대체하는 테스트 대역은 대역은 목
조회
- 부작용이 없고, 반환값이 있음
- 조회를 대체하는 테스트 대역은 대역은 스텁
2. 식별할 수 있는 동작과 구현 세부 사항
식별할 수 있는 동작은 공개 API와 다르다
- 공개 API는 식별할 수 있는 동작으로, 비공개 API는 구현 세부 사항으로 설계될 수록 좋은 설계임
식별할 수 있는 동작의 기준
- 클라이언트가 목표를 달성하는 데 도움이 되는 연산
- 클라이언트가 목표를 달성하는 데 도움이 되는 상태
구현 세부 사항 유출
연산
- 단일한 목표를 달성하고자 클래스에서 호출해야 하는 연산의 수가 1보다 크면 해당 클래스에서 구현 세부 사항을 유출할 가능성이 있음
- 이를 위해 캡슐화를 잘하여 불변성을 위반하지 않고 세부사항을 노출하지 않음
- 해당 연산이 클래스의 불변성을 위반하지 않도록 할 수 있음
- 객체 내부 상태가 손상되는 위험으로부터 보호
상태
- 유의미한 동작에 관련한 상태를 노출하는 것도 구현 세부 사항 유출
'Code' 카테고리의 다른 글
[단위 테스트] 6-1. 단위 테스트 스타일: 단위 테스트 스타일 (0) | 2025.01.25 |
---|---|
[단위 테스트] 5-2. 목과 테스트 취약성: 통신 (0) | 2025.01.24 |
[단위 테스트] 4-2. 좋은 단위 테스트의 4대 요소: 이상적인 테스트 (0) | 2025.01.24 |
[단위 테스트] 4-1. 좋은 단위 테스트의 4대 요소: 4대 요소 (0) | 2025.01.19 |
[단위 테스트] 3. 단위 테스트 구조 (0) | 2025.01.07 |