[xUnit 테스트 패턴] 04장 - 테스트 자동화의 철학


04장 - 테스트 자동화의 철학

철학이 중요한 이유

  • 테스트 나중과 테스트 먼저
  • 단계별 테스트와 한꺼번에 테스트
  • 밖에서 안으로와 안에서 밖으로
  • 동작 검증 과 상태 검증
  • 단계별 테스트로 픽스처 설계하기와 미리 큰 픽스처 설계하기

철학적 차이점

테스트 먼저냐 테스트 나중이냐

  • 테스트 먼저 방식으로 작성하면 픽스처 설치, 결과 검증을 위해 객체 상태에 접근하는 것도 더 자연스럽게 할 수 있다.
    • 처음 설계 시 교체 가능한 의존을 염두에 뒀으므로 결과 검증용으로 테스트 대역을 써서 의존을 대신할 가능성도 크게 향상 된다.

단계별 테스트냐 한꺼번에 테스트냐

  • ‘테스트를 약간, 코드도 약간, 다시 테스트를 약간’ 하는 방식은 점진적인 개발에 있어 최상의 상태이다.
  • 단위 테스트
    • 객체나 메소드에 대한 상세한 요구 사항을 언제 나열할지 결정할 수 있다.
  • 고객 테스트
    • 하나의 스토리에 대한 개발에 들어가기 전에 관련된 모든 테스트를 준비해야 한다.

밖에서 안으로냐 안에서 밖으로냐

  • 밖에서 안으로
    • 의존 문제 해결해야 함
    • 개발하려는 큰 단위의 컴포넌트를 위한 컴포넌트 테스트를 구현할 수 있다.
    • 고객처럼 생각하게 해준다.
    • 모든 테스트를 다 찾아냈을때가 명세서를 끝낸 순간이다.
  • 안에서 밖으로
    • 안에서 이미 만들어진 클래스를 이용 할 수 있음
    • 바깥쪽 소프트웨어의 요구 사항을 예상해야 한다.
    • 바깥쪽 소프트웨어가 안쪽 소프트웨어에 종속된다.

동작 검증이냐 상태 검증이냐

  • 상태주의자
    • SUT를 특정 상태에 두고 실행한 후 SUT가 원했던 상태인지 검증하는 것만으로 충분하다고 주장
  • 동작주의자
    • SUT의 시작과 끝의 상태뿐만 아니라 SUT가 밑으로 호출하는 것까지 검증해야 한다고 주장
    • SUT의 밖으로 나가는 인터페이스에 대한 상세 호출을 정의 해야 한다.
    • 좀 더 어려운 리팩토링 필요
    • 소프트웨어의 각 단위를 따로 테스트하기 좋음
    • 동작 주도 개발(Behavior-Driven Development)

픽스처를 미리 설계하기냐 픽스처를 단계별 테스트에 따라 설계하기냐

  • 픽스처 미리 설계하기
    • 여러 테스트에서 같이 쓰는 공유 픽스처로 설치
    • 특정 테스트 메소드를 위한 사전 조건인지 알기 힘듦
  • 픽스처를 단계별 테스트에 따라 설계하기
    • 테스트 메소드별로 최소 픽스처를 맞춤 제작
    • 신선한 픽스처와 거의 같음

나의 철학

  • 테스트를 먼저 작성
  • 테스트는 예제다
  • 보통 한 번에 하나의 테스트를 작성하지만 때에 따라 미리 개요를 잡기 위해 생각나는 모든 테스트를 작성하기도 한다.
  • 밖에서 안으로 개발하면 다음 안쪽 레이어에서 어떤 테스트가 필요할지 알아내는 데 도움이 된다.
  • 상태 검증을 주로 하지만 코드 커버리지를 높이기 위해 동작 검증을 쓰기도 한다.
  • 단계별 테스트에 따라 픽스처를 설계한다.