Skip to content

Test Double

tomchoi edited this page Mar 8, 2026 · 1 revision

Test Double (테스트 더블)

단위 테스트에서 실제 의존 객체 대신 사용하는 대체 객체의 통칭입니다.
Gerard Meszaros의 xUnit Test Patterns에서 정의한 용어입니다.


종류

유형 설명 사용 시점
Dummy 전달만 하고 사용되지 않는 객체. 메서드 시그니처를 채우기 위함. 파라미터가 필요할 때
Stub 미리 정해진 답만 반환. 테스트 중 호출 여부는 검증하지 않음. 특정 입력에 대한 반환값이 중요할 때
Spy Stub + 호출 이력 기록. 나중에 몇 번 호출됐는지 등 검증 가능. 호출 횟수·인자 검증이 필요할 때
Mock 기대 호출을 미리 정의하고, 그대로 호출됐는지 검증. (행위 검증) “이 메서드가 이렇게 불렸어야 한다”를 검증할 때
Fake 동작하는 구현이지만 단순/인메모리 버전. (예: 인메모리 DB) 실제 의존성 없이 동작만 흉내낼 때

Stub vs Mock (요약)

  • Stub: 상태 검증 — “결과가 이 값이어야 한다.”
  • Mock: 행위 검증 — “이 메서드가 이 인자로 호출됐어야 한다.”

Swift/iOS에서의 활용

  • Protocol + 구현체 분리: 의존성을 프로토콜로 두고, 테스트용 Stub/Mock 구현체를 주입.
  • Fake: UserRepository 대신 인메모리 배열을 쓰는 FakeUserRepository 등.

참고

  • Martin Fowler, Mocks Aren't Stubs
  • Gerard Meszaros, xUnit Test Patterns: Refactoring Test Code

Clone this wiki locally