본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
https://fastcampus.info/4n8ztzq
안녕하세요 :)
오늘은 "50일의 기적 AI 환급반_ 대규모 채팅 플랫폼으로 한 번에 끝내는 실전 대용량 트래픽 커버 완전판 " 챌린지에 도전하는 아홉번째 날입니다.
여덟번째 날에는 단위 테스트와 통합 테스트의 차이에 대해 배웠었는데요. 오늘은 과연 어떤 내용들을 배울 수 있을지 공부하고 포스팅 하도록 하겠습니다.
오늘 학습할 내용의 제목은,
Part 2. 채팅 뼈대 프로젝트 개발 > Ch 1. 테스트에 대한 이야기 >
02. 테스트 더블은 무엇인가
입니다.
🎭 테스트 더블이란? — 단위 테스트를 위한 스턴트맨들
- 테스트에서 사용하는 Mock이나 Stub이 뭔지 헷갈리셨던 적 있으셨나요? 이들은 모두 ‘테스트 더블(Test Double)’이라는 큰 개념 안에 속합니다.
- 이 용어는 영화에서 배우 대신 위험한 장면을 연기하는 스턴트 더블에서 유래한 것으로, 테스트에서도 실제 객체를 대체하는 역할을 한다고 합니다.
🧱 테스트 더블의 5가지 유형
- 1. Dummy
- 행위는 없고 존재만 필요할 때 사용합니다. 생성자 파라미터로 전달만 되면 되지, 실제 호출되지 않으면 더미로도 충분합니다.
- 2. Stub
- 리턴 값을 테스트 목적에 맞게 조작할 때 사용합니다. ex) 외부 의존 객체의 메서드에서 특정 값을 강제로 반환하고 싶을 때.
- 3. Mock
- Stub 기능 + 행위 검증 기능을 추가한 객체입니다. "이 메서드가 몇 번 호출되었는가?"와 같은 행위 기반 테스트에 사용됩니다.
- 4. Spy
- 실제 객체를 기반으로 필요한 메서드만 오버라이드합니다.
- 기본 로직은 그대로 두고 특정 동작만 바꾸고 싶을 때 유용합니다.
- 5. Fake
- 전체 기능을 흉내 내는 객체로, 직접 구현하거나 상속해서 만들어야 합니다.
- 가장 손이 많이 가지만, 실제 테스트 환경을 유사하게 구성할 수 있습니다.
- 처음에는 “모킹(Mock)만 잘 쓰면 되는 거 아냐?”라고 생각했지만, 실제로 테스트를 잘하려면 상황에 따라 어떤 테스트 더블을 사용할지 선택하는 능력이 필요한 것 같습니다. 단위 테스트는 그저 테스트를 ‘돌리는 것’이 아니라 복잡한 의존성을 분리하고, 의도를 명확히 검증하는 과정이라고 생각합니다. Spock을 활용해 직접 다양한 테스트 더블을 실습해보며, 단위 테스트에 대한 감을 기르고 테스트가 개발의 발목이 아닌 날개가 될 수 있도록 이 프로젝트를 통해 경험을 쌓아가야겠습니다. 다음 글에서는 Spock 사용을 위한 Groovy 에 대해 알아보는 시간을 가질 예정입니다 :)