[xUnit 테스트 패턴] 14장 - 효과적인 테스트 자동화를 위한 길잡이


14장 - 효과적인 테스트 자동화를 위한 길잡이

자동 테스트를 유지 보수하기 좋게 만드는 길잡이

  • 주요 경로 코드 실행
    • 테스트 대상 시스템의 간단한 테스트 전 상태를 설치
    • 테스트하려는 메소드를 호출해 SUT를 실행
  • 주요 경로 결과 바로 검증
    • SUT의 응답에 대해 단언 메소드 호출
    • 테스트 후 상태에 대해 단언 메소드 호출
  • 대안 경로 검증
    • SUT 메소드에 다양한 인자를 넣어본다.
    • SUT의 테스트 전 상태를 다양하게 해본다.
    • 테스트 스텁을 통해 SUT의 간접 입력을 제어해본다.
  • 간접 출력 동작 검증
    • 모의 객체나 테스트 스파이로 밖으로 나가는 메소드 호출을 가로채 검증
  • 테스트 실행, 유지 보수 최적화
    • 테스트 실행 빠르게 만들기
    • 테스트를 이해하고 유지 보수하기 쉽게 만들기
    • SUT를 테스트하기 쉽게 설계하기
    • 놓친 버그에 대한 위험 줄이기

주요 경로 코드 실행

  • SUT의 API를 호출하는 간단한 왕복 테스트 형태로 단순 성공 테스트를 자동화 해야 한다.

주요 경로의 직접 출력 값 검증

  • 단언 메소드 호출

대안 경로 검증

  • 클라이어트에서 인자에 다른 값을 넘겨준다.
  • SUT의 이전 상태를 다르게 만든다.
  • SUT가 의존하는 컴포넌트의 메소드에서 다른 결과를 리턴한다.

간접 입력 제어하기

  • 테스트 스텁을 통해 SUT를 원하는 경로로 보낼 수 있는 값을 리턴하게 하면 된다.
  • 테스트 스텁 구현 두가지 방법
    • 하드 코딩된 테스트 스텁
    • 설정되는 테스트 스텁
  • 성공하는 테스트
    • 단순 성공 테스트
    • 응답기라 하는 테스트 스텁 사용
  • 예외 테스트
    • 에러나 예외 발생
    • 기대 예외 테스트
    • 훼방꾼이라 하는 테스트 스텁 사용

테스트를 반복 가능하고 견고하게 만들기

  • 의존 컴포넌트(DOC)를 테스트 스텁으로 교체하기

간접 출력 동작 검증

  • 테스트 스파이
    • 자신이 어떻게 호출됐는지를 기억했다가 단언 메소드에서 비교
  • 모의 객체
    • 픽스처 설치 시 기대 값을 담고 SUT가 실행되는 동안 실제 호출이 들어오면 이를 기대 값과 비교

테스트 실행과 유지 보수 최적화

테스트 실행을 빠르게 만들기

  • 가짜 객체로 의존 컴포넌트를 바꾸기

테스트를 이해하고 유지 보수하기 쉽게 만들기

  • 테스트 유틸리티 메소드 사용
    • 애매한 테스트를 이해하기 쉽게 만들고 테스트 코드 중복 제거
    • 사용예 - 생성 메소드, 맞춤 단엄, 찾기 메소드, 인자를 받는 테스트
  • 테스트케이스 클래스 쪼개기
  • 테스트 조건을 체계적으로 보여주기

누락된 버그에 대한 위험 줄이기

  • 테스트 유틸리티 메소드에 의도가 드러나는 이름을 붙여줘야 한다.
  • 테스트 유틸리티 메소드의 중요 동작은 테스트 유틸리티 테스트로 검증해야 한다.