둘 다 테스트에 사용하는 가짜 객체지만 구별하기는 또 애매하다. 다음과 같이 구별하면 크게 틀리지 않는다.
- 목 객체는 메소드 호출 여부, 순서, 횟수 등 행위 검증(behavior verification) 을 위해 만들어 사용하는 가짜 객체
- 스텁 객체는 값 기반의 상태 검증(state verification) 을 위해 미리 정해진 값을 반환하도록 만들어 사용하는 가짜 객체
- 동작 검증에 사용하는 목 객체는 복잡한 기능이 포함되므로 테스트 프레임워크를 통해서만 생성할 수 있고,
- 상태 검증에 사용하는 스텁 객체는 간단하므로
new XXX()
와 같이 직접 생성할 수도 있다.
자세한 내용은 마틴 파울러의 글을 참고한다.