더미 객체(Dummy)
더미는 테스트 대상 클래스에 전달되지만 절대 사용되지 않는 객체다.
객체가 필요할 뿐 객체의 기능까지는 필요하지 않은 경우 사용한다.
페이크 객체(Fake)
페이크 객체는 시뮬레이션하려는 클래스 같이 실제로 동작하는 구현체를 가진다.
하지만 대개 똑같이 동작하는 것은 아니고 훨씬 단순한 방법으로 동작한다.
스텁(Stub)
스텁은 테스트 과정에서 수행된 호출에 대해 하드 코딩된 응답을 제공한다.
페이크 객체와는 달리 스텁은 실제로 동작하는 구현체가 없다.
모의 객체(Mock)
모의 객체는 메서드의 응답을 설정할 수 있다는 점에서 스텁 같은 역할을 한다.
하지만 모의 객체는 모든 상호작용을 저장해서 나중에 단언문에 활용할 수 있도록 해준다.
모의 객체의 단점
모의 객체를 사용한 테스트는 자연스럽게 모의 객체를 사용하지 않는 테스트보다 코드와 결합하게 된다.
모의 객체는 객체의 행위를 검증하기 위한 객체로 테스트에서 실제 구현에 대해 알게 된다.
즉, 모의 객체는 테스트를 단순하게 해 주지만 테스트와 제품 코드 간의 결합도를 증가시킨다.
ControllerTest와 UseCaseTest와 같이 객체의 행위를 검증하기 위한 테스트에서 모의 객체를 사용하면 적절하게 사용할 수 있을 것이라 생각한다.
모의해야 하는 대상 / 하지 말아야 하는 대상
모의해야 하는 대상
- 의존성이 너무 느린 경우
- 의존성이 외부 인프라와 통신하는 경우
- 의존성을 시뮬레이션하기 힘든 경우
모의하지 말아야 하는 대상
- 엔티티
- 네이트브 라이브러리와 유틸리티 메서드
- 충분히 단순한 의존성
스파이(Spy)
스파이는 의존성을 감시한다.
스파이는 실제 객체를 감싸서 그 행동을 관찰한다.
모의 객체를 사용하는 것보다 실제 구현하는 게 훨씬 더 쉽고 테스트 대상 메서드가 의존 대상과 어떻게 상호작용하는지 단언하고자 하는 경우에 사용된다.
스파이는 현업에서는 보기 힘들다.
'개발' 카테고리의 다른 글
이벤트 모듈 설계 문서 (0) | 2025.01.14 |
---|---|
레디스를 메시지 브로커로 사용하기 위한 정리 (1) | 2024.12.03 |
MC/DC 커버리지 (0) | 2024.12.01 |
네임드 락을 활용한 동시성 제어 (2) | 2024.09.08 |
Pinpoint 도입 이모저모 (0) | 2024.08.22 |