반응형
Stunt Double
배우와 유사한 모습과 행위를 할 수 있어, 영화에서 위험하고 역동적인 액션을 대신 수행하는 사람. Stunt Man/Woman이라고도 함.
이러한 의미에서 가져온 Test Double.
5가지 종류
- Dummy
아무것도 하지 않는 깡통 객체.
실제 객체를 모방하기만 한. 동작이나 행위에 대해 정의되어 있지 않음. - Fake
단순한 형태로 동일한 기능은 수행하나, 프로덕션에서 쓰기에는 기능이 부족한 객체
Ex)FakeRepsotiroy
: 실제 프로덕션에서는 DB에 직접 액세스하여 저장/조회하지만 Fake Repository에서는 memory map을 선언하고, 해당 객체에 저장/조회하는 방식으로 구현한다.
ㄴ 이를 프로덕션에서 쓰기에는 기능이 부족함. - Stub
테스트를 수행하며 실제로 로직이 수행되지 않고 요청에 대해 정해진 결과를 제공하도록 객체를 세팅한다.
그 외 정의하지 않는 것에는 응답하지 않는다.
Mockito와 같은 가짜(Mock) 객체를 지원하는 테스트 프레임워크를 활용하여 가짜 객체에 원하는 결과를 Stub한다.
- Spy
Stub + 테스트 코드를 수행하면서 호출된 내용을 기록해놓고, 관련된 정보를 제공하는 객체.
일부는 실제 객체의 동작대로 동작/반환하고 일부는 개발자가 동작에 대해 미리 정의할 수 있다. - Mock
행위에 대한 기대를 명세하고, 그에 따라 동작하도록 만들어진 객체
Stub과 Mock 차이가 뭐지??
A. 검증하려는 목적이 다름.
- 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 |