프로그래밍/JAVA

테스트 더블(Test Double) : Mock, Stub, Spy의 차이

Cognivox 2025. 4. 8. 12:50
반응형

✅ **📌 테스트 더블 (Test Double)**란?

테스트를 쉽게 만들기 위해 실제 객체를 흉내 낸 가짜 객체들

영화에서 대역 배우(double) 쓰는 것처럼,
→ 테스트에서도 진짜 객체 대신 **“가짜 객체”**를 쓰는 거임.


🧩 테스트 더블의 5가지 유형

종류설명대표 특징
Dummy 값 전달만 하고 사용되지 않음 쓰이진 않지만 인자 채우기용
Stub 미리 정해진 값 반환 로직 없이 값만 반환
Mock 메서드 호출 여부 등 행동 검증 assert_called 등 사용
Spy 진짜 객체를 감시, 일부만 가짜로 대체 실제 동작 + 호출 기록
Fake 진짜처럼 동작하지만 단순한 구현체 예: 메모리 DB

💡 정리하자면:

  • 🔹 이것들은 테스트 자체가 아니라, 테스트를 "도와주는 역할자"
  • 🔹 Mock, Stub, Spy → 전부 Test Double의 종류

📌 테스트 더블을 쓰는 이유

1️⃣ 외부 시스템 없이 테스트하려고

  • DB, 네트워크, API 등 진짜 시스템은 느리고 불안정해
    ➡ **가짜 객체(Test Double)**로 대신해서 빠르고 안정적인 테스트 가능

2️⃣ 테스트를 더 “예측 가능하게” 만들기 위해

  • 진짜 시스템은 응답이 다를 수도 있음
    Stub/Mock으로 고정된 결과를 리턴해서 결과 예측 가능

3️⃣ 아직 구현되지 않은 모듈도 테스트하기 위해

  • 다른 팀의 기능이 아직 없을 수도 있음
    ➡ 대신 임시로 Fake나 Stub 만들어 먼저 개발 가능

4️⃣ 행동을 검증하고 싶을 때

  • 함수가 몇 번 호출됐는지, 올바른 인자로 불렸는지 확인하려면
    Mock / Spy가 필수

💡 한 줄 요약

외부에 의존하지 않고, 빠르고 정확하게, 내가 원하는 대로 테스트하려고 쓰는 도구!”

 

 

✅ 1. Stub (스텁)

미리 정해둔 값만 돌려주는 단순한 가짜 객체

  • 입력 → 출력만 고정
  • 내부 동작은 관심 없음
  • 주로 데이터 반환용

📌 예시:


✅ 2. Mock (목 객체)

행동까지 검증 가능한 가짜 객체

  • Stub 기능 포함 + 행동(호출 여부, 횟수) 검증
  • 메서드가 정확히 몇 번 호출됐는지 확인 가능
  • 테스트 실패 원인 파악에 유리

✅ 3. Spy (스파이)

진짜 객체를 감시 + 일부만 가짜로 바꿈

  • 진짜 객체처럼 동작하면서, 호출 여부 확인 가능
  • 실제 메서드를 호출하면서도 감시(Spy) 가능
  • 부분 Mock 느낌

📌 예시 (Java / Mockito):


🆚 한눈에 비교

구분StubMockSpy
반환 값 설정
호출 확인
진짜 메서드 호출
목적 값 고정 행동 검증 감시 + 부분 테스트

💡 요약 한줄:

Stub은 값만 줘, Mock은 행동도 확인해, Spy는 진짜처럼 감시함.

#테스트더블 #TestDouble #Mock #Stub #Spy #Dummy #Fake #단위테스트 #유닛테스트 #TDD #테스트자동화 #개발자팁 #소프트웨어테스트 #QA테스트 #행위기반테스트 #의존성제거 #테스트전략 #테스트코드 #파이썬테스트 #자바테스트

 
 
반응형