대역(Test Double)
외부요인(테스트 대상의 파일 시스템접근이나 DB에서 데이터 조회, 외부 서버와 http통신)에 의존적인 테스트는 때때로 원활한 테스트를 진행하기 힘든 경우가 발생할 수 있다.
이때 실제 객체를 대신 사용할 객체를 테스트 더블
이라고 한다.
테스트 더블의 종류에는 Stub, Fake, Spy, Mock등이 있다.
Stub
구현을 단순한 것으로 대체한다. 전체 기능이 아닌 테스트에 맞게 일부 기능에 집중하여 원하는 기능대로 동작하게 구현한다.
Fake
실제 구현이 존재하는 객체로 실제로는 사용할 수 없지만, 테스트를 위해 사용하는 객체
- 수행하려는 테스트가 외부 환경에 의존적인 경우(fake DB)
Spy
호출된 내역을 기록한다. 기록한 내용은 테스트 결과를 검증할 때 사용한다.
Mock
기대한 대로 동작하는지 행위를 검증한다. 기대한 대로 동작하지 않으면 익셉션을 발생할 수 있다.
stub, mock 차이?
그동안 mock의 존재에 대해서만 알고 stub이나 spy는 알지 못했는데, stub과 mock의 큰 차이는 stub은 호출 시 미리 준비된 객체로 응답하고 mock은 행위를 검증하기 위해 사용하는 객체 정도로 이해하였다.
참고문서
테스트 주도 개발 시작하기 - 최범균