테스트Medium#424
테스트 더블(Test Double)의 종류와 각각의 사용 목적을 설명해주세요.
#테스트#TestDouble#Mock#Stub
답변 포인트
Dummy, Stub, Mock, Spy, Fake가 무엇을 대체하고 무엇을 검증하는지 비교해보세요.
정답 및 해설
빠른 요약
테스트 더블은 테스트 대상이 의존하는 객체를 실제 객체 대신 가벼운 대역으로 바꾸는 기법입니다. 외부 API, DB, 시간, 랜덤 값처럼 테스트를 느리거나 불안정하게 만드는 요소를 통제할 수 있습니다.
테스트 더블은 테스트 대상이 의존하는 객체를 실제 객체 대신 가벼운 대역으로 바꾸는 기법입니다. 외부 API, DB, 시간, 랜덤 값처럼 테스트를 느리거나 불안정하게 만드는 요소를 통제할 수 있습니다.
종류별 목적은 조금씩 다릅니다.
- Dummy: 전달만 하고 실제로 사용하지 않는 객체
- Stub: 정해진 응답을 돌려주는 객체
- Fake: 실제처럼 동작하지만 단순화된 구현체. 예: in-memory repository
- Spy: 호출 여부나 인자를 기록하는 객체
- Mock: 기대한 상호작용이 발생했는지 검증하는 객체
예를 들어 결제 성공 후 이메일 발송 함수를 호출하는지 보고 싶다면 Spy나 Mock이 적합합니다. 반대로 사용자 조회 API가 항상 특정 응답을 주게 만들고 싶다면 Stub이 자연스럽습니다.
주의할 점은 Mock을 너무 많이 쓰면 구현 세부사항에 강하게 묶인 테스트가 된다는 것입니다. 리팩터링만 해도 테스트가 깨질 수 있습니다. 그래서 핵심 비즈니스 규칙은 입력과 출력 중심으로 검증하고, 외부 시스템과의 경계에서만 테스트 더블을 쓰는 것이 유지보수에 좋습니다.