Test Code
[참고 글] Test Double
뭉지(moonz)
2024. 5. 17. 15:05
반응형
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번 호출됐는지, 어떤 값들이 호출됐는지를 체크. -> 행위 검증
반응형