[xUnit 테스트 패턴] 14장 - 효과적인 테스트 자동화를 위한 길잡이
14장 - 효과적인 테스트 자동화를 위한 길잡이
자동 테스트를 유지 보수하기 좋게 만드는 길잡이
- 주요 경로 코드 실행
- 테스트 대상 시스템의 간단한 테스트 전 상태를 설치
- 테스트하려는 메소드를 호출해 SUT를 실행
- 주요 경로 결과 바로 검증
- SUT의 응답에 대해 단언 메소드 호출
- 테스트 후 상태에 대해 단언 메소드 호출
- 대안 경로 검증
- SUT 메소드에 다양한 인자를 넣어본다.
- SUT의 테스트 전 상태를 다양하게 해본다.
- 테스트 스텁을 통해 SUT의 간접 입력을 제어해본다.
- 간접 출력 동작 검증
- 모의 객체나 테스트 스파이로 밖으로 나가는 메소드 호출을 가로채 검증
- 테스트 실행, 유지 보수 최적화
- 테스트 실행 빠르게 만들기
- 테스트를 이해하고 유지 보수하기 쉽게 만들기
- SUT를 테스트하기 쉽게 설계하기
- 놓친 버그에 대한 위험 줄이기
주요 경로 코드 실행
- SUT의 API를 호출하는 간단한 왕복 테스트 형태로 단순 성공 테스트를 자동화 해야 한다.
주요 경로의 직접 출력 값 검증
대안 경로 검증
- 클라이어트에서 인자에 다른 값을 넘겨준다.
- SUT의 이전 상태를 다르게 만든다.
- SUT가 의존하는 컴포넌트의 메소드에서 다른 결과를 리턴한다.
간접 입력 제어하기
- 테스트 스텁을 통해 SUT를 원하는 경로로 보낼 수 있는 값을 리턴하게 하면 된다.
- 테스트 스텁 구현 두가지 방법
- 하드 코딩된 테스트 스텁
- 설정되는 테스트 스텁
- 성공하는 테스트
- 단순 성공 테스트
응답기
라 하는 테스트 스텁 사용
- 예외 테스트
- 에러나 예외 발생
- 기대 예외 테스트
훼방꾼
이라 하는 테스트 스텁 사용
테스트를 반복 가능하고 견고하게 만들기
- 의존 컴포넌트(DOC)를 테스트 스텁으로 교체하기
간접 출력 동작 검증
- 테스트 스파이
- 자신이 어떻게 호출됐는지를
기억
했다가 단언 메소드에서 비교
- 모의 객체
- 픽스처 설치 시 기대 값을 담고 SUT가 실행되는 동안 실제 호출이 들어오면 이를 기대 값과 비교
테스트 실행과 유지 보수 최적화
테스트 실행을 빠르게 만들기
테스트를 이해하고 유지 보수하기 쉽게 만들기
- 테스트 유틸리티 메소드 사용
- 애매한 테스트를 이해하기 쉽게 만들고 테스트 코드 중복 제거
- 사용예 - 생성 메소드, 맞춤 단엄, 찾기 메소드, 인자를 받는 테스트
- 테스트케이스 클래스 쪼개기
- 테스트 조건을 체계적으로 보여주기
누락된 버그에 대한 위험 줄이기
- 테스트 유틸리티 메소드에 의도가 드러나는 이름을 붙여줘야 한다.
- 테스트 유틸리티 메소드의 중요 동작은 테스트 유틸리티 테스트로 검증해야 한다.