[xUnit 테스트 패턴] 04장 - 테스트 자동화의 철학
04장 - 테스트 자동화의 철학
철학이 중요한 이유
- 테스트 나중과 테스트 먼저
- 단계별 테스트와 한꺼번에 테스트
- 밖에서 안으로와 안에서 밖으로
- 동작 검증 과 상태 검증
- 단계별 테스트로 픽스처 설계하기와 미리 큰 픽스처 설계하기
철학적 차이점
테스트 먼저냐 테스트 나중이냐
- 테스트 먼저 방식으로 작성하면 픽스처 설치, 결과 검증을 위해 객체 상태에 접근하는 것도 더 자연스럽게 할 수 있다.
- 처음 설계 시 교체 가능한 의존을 염두에 뒀으므로 결과 검증용으로 테스트 대역을 써서 의존을 대신할 가능성도 크게 향상 된다.
단계별 테스트냐 한꺼번에 테스트냐
- ‘테스트를 약간, 코드도 약간, 다시 테스트를 약간’ 하는 방식은 점진적인 개발에 있어 최상의 상태이다.
- 단위 테스트
- 객체나 메소드에 대한 상세한 요구 사항을 언제 나열할지 결정할 수 있다.
- 고객 테스트
- 하나의 스토리에 대한 개발에 들어가기 전에 관련된 모든 테스트를 준비해야 한다.
밖에서 안으로냐 안에서 밖으로냐
- 밖에서 안으로
- 의존 문제 해결해야 함
- 개발하려는 큰 단위의 컴포넌트를 위한 컴포넌트 테스트를 구현할 수 있다.
- 고객처럼 생각하게 해준다.
- 모든 테스트를 다 찾아냈을때가 명세서를 끝낸 순간이다.
- 안에서 밖으로
- 안에서 이미 만들어진 클래스를 이용 할 수 있음
- 바깥쪽 소프트웨어의 요구 사항을 예상해야 한다.
- 바깥쪽 소프트웨어가 안쪽 소프트웨어에 종속된다.
동작 검증이냐 상태 검증이냐
- 상태주의자
- SUT를 특정 상태에 두고 실행한 후 SUT가 원했던 상태인지 검증하는 것만으로 충분하다고 주장
- 동작주의자
- SUT의 시작과 끝의 상태뿐만 아니라 SUT가 밑으로 호출하는 것까지 검증해야 한다고 주장
- SUT의 밖으로 나가는 인터페이스에 대한 상세 호출을 정의 해야 한다.
- 좀 더 어려운 리팩토링 필요
- 소프트웨어의 각 단위를 따로 테스트하기 좋음
- 동작 주도 개발(Behavior-Driven Development)
픽스처를 미리 설계하기냐 픽스처를 단계별 테스트에 따라 설계하기냐
- 픽스처 미리 설계하기
- 여러 테스트에서 같이 쓰는 공유 픽스처로 설치
- 특정 테스트 메소드를 위한 사전 조건인지 알기 힘듦
- 픽스처를 단계별 테스트에 따라 설계하기
- 테스트 메소드별로 최소 픽스처를 맞춤 제작
- 신선한 픽스처와 거의 같음
나의 철학
- 테스트를 먼저 작성
- 테스트는 예제다
- 보통 한 번에 하나의 테스트를 작성하지만 때에 따라 미리 개요를 잡기 위해 생각나는 모든 테스트를 작성하기도 한다.
- 밖에서 안으로 개발하면 다음 안쪽 레이어에서 어떤 테스트가 필요할지 알아내는 데 도움이 된다.
- 상태 검증을 주로 하지만 코드 커버리지를 높이기 위해 동작 검증을 쓰기도 한다.
- 단계별 테스트에 따라 픽스처를 설계한다.