반응형
Stunt Double
배우와 유사한 모습과 행위를 할 수 있어, 영화에서 위험하고 역동적인 액션을 대신 수행하는 사람. Stunt Man/Woman이라고도 함.
Stund Double의 의미에서 파생된 Test Double.
Test Double 의 5가지 종류
- Dummy
아무것도 하지 않는 깡통 객체.
실제 객체를 모방하기만 하여 동작이나 행위에 대해 정의되어 있지 않음. - Fake
동일한 기능을 수행하지만 단순한 형태로 구현되어 프로덕션에서 쓰기에는 기능이 부족한 객체.
Ex)FakeRepsotiroy: 실제 프로덕션에서는 DB에 직접 액세스하여 저장/조회하지만 Fake Repository에서는 memory Map 을 선언하여 해당 객체에 저장/조회하는 방식으로 구현한다. - Stub
테스트 실행 시 원하는 결과를 제공하도록 미리 특정 요청에 대한 결과를 Stub하며, 그 외 정의하지 않는 것에는 응답하지 않는다.
- Spy
실제 객체를 감싸여(wrapping) 생성되는 객체로, 일부는 실제 객체의 메서드를 실행하고, 일부는 특정 요청에 대한 결과를 미리 정의할 수 있다.
테스트 코드를 수행하면서 호출된 내용을 기록해놓고, 관련된 정보를 제공해준다.
일부 기능은 실행되지 않도록 하면서 일부 기능만 테스트하고 싶을 때 사용된다. ex) 외부 API 호출은 막고, 내부 로직만 테스트. - Mock
완전히 가짜 객체로, Stub 하지 않으면 아무 동작도 하지 않고, 기본 값을 반환한다.
외부 의존성을 완전히 대체하고 싶을 때, Mock으로 생성한다.
소스코드가 실제 실행되진 않지만, 메서드의 호출 검증은 가능하다.
Stub과 Mock 은 비슷한 기능을 수행하는 듯하지만, 검증하려는 목적 관점에서 다르다.
- Stub : 미리 반환값을 고정하여 로직을 단순화하고, 필요한 테스트 결과에 초점을 맞춘다. 객체의 내부 상태가 어떻게 바뀌었는지 체크하는 용도
- Mock : 행위를 검증하는 목적에 사용된다. 메서드가 호출되었는지 행위를 검증하는 용도
ex) 메일 발송 시스템의 발송 기능을 테스트한다했을 때,
Stub : 메일 발송 List의 크기가 1인지 체크. -> 상태 검증
Mock : 메일 발송 메서드가 1번 호출됐는지, 어떤 값들이 호출됐는지를 체크. -> 행위 검증
반응형
'Test Code' 카테고리의 다른 글
| [JUnit5] @Mock 필드 초기화 시점에 따른 @BeforeAll 이슈 (@BeforeEach, 테스트코드의 라이프 사이클) (1) | 2024.04.07 |
|---|---|
| [JUnit5] 실패 케이스 테스트하기 (0) | 2024.02.24 |
| [테스트 코드] Controller Test Code / @WebMvcTest / 행위 검증 (0) | 2024.02.12 |