목차
기능에서의 상황
예시 기능
- 파일에서 숫자를 읽어와 숫자의 합을 구한다.
- 파일에는 한 줄마다 한개의 숫자를 포함 한다.
예외적인 상황
- 파일이 없는 상황
- 파일에 숫자가 아닌 잘 못된 데이터가 존재하는 상황
테스트 코드는 주어진 상황에 따라 기능 실행 결과가 달라질 수 있다.
→ 테스트 코드 구조에도 영향을준다.
→ 결과에 영향을 줄 수 있는 가능한 많은 예외 상황을 찾기 위한 노력이 필요하다.
테스트 코드의 구성 요소: 상황, 실행, 결과 확인
상황, 실행, 결과 확인 :Given, When, Then
상황설정 방법
- 테스트를 생성할 때마다 상황을 설정
- beforeEach() 를 이용하여 똑같은 상황을 설정
- 상황이 없는 경우도 존재한다.
실행 결과 확인 방법
- 실행 결과의 리턴 값을 사용하여 결과 확인
- 익셉션을 발생하여 결과 확인
위의 구조로 테스트를 작성하지 않아고 된다.
하지만 테스트 코드를 보고 테스트 내용을 이해할 수 있어야 한다.
외부 상황과 외부 결과
테스트는 실행할 때마다 동일한 결과를 보장해야 한다.
하지만, 상황이 항상 테스트 대상으로 국한된 것은 아니다.
외부 요인도 있다.
( 외부 요인 예 ) 파일이 존재 하지 않는 상황
대처 방법
- 명시적으로 파일이 없는 상황을 만든다.
- 파일을 미리 준비해둔다. ( 준비 해둔 파일도 같이 버전 관리대상에 추가)
- 테스트를 시작할 때 상황에 맞는 파일을 만드는 코드를 추가한다.
❏ 외부 상태가 테스트 결과에 영향을 주지 않게 하기
회원 가입 기능을 예로 들면
- 중복된 ID가 이미 존재하면 가입 실패
이 경우 외부상태(다른 테스트에서 같은 ID 를 사용)가 테스트 결과에 영향을 주게 된다.
테스트의 성공 여부가 바뀌지 않으려면
- 테스트 실행 전에 외부를 원하는 상태로 만든다.
- 테스트를 실행 후에 외부 상태를 원래대로 되돌려놓는다.
❏ 외부 상태와 테스트 어려움
상황과 결과에 영향을 주는 외부요인 : 파일, DB, 외부 서버 등 다양
( 예시 ) 자동이체 등록 기능에 대한 테스트 상황 (REST API 이용, 외부 API 이용)
- REST API 응답 결과가 유효한 계좌 번호인 상황
- REST API 응답 결과가 유효하지 않은 계좌 번호인 상황
- REST API 서버에 연결할 수 없는 상황
- REST API 서버에서 응답을 5초 이내에 받지 못하는 상황
외부 API사용하여 하기 어려운 테스트
- 서버에 연결할 수 없는 상황
- 서버에서 응답을 5초 이내에 받지 못하는 상황
이 처럼 외부 요인은 테스트 코드에서 다루기 힘든 존재
→ 테스트 대상의 상황과 결과에 외부 요인이 관여할 경우 대역을 사용