
Stunt double (대역 배우) 에서 유래한 용어로
실제 배우가 촬영하기 어려운 장면들을 대역 배우가 대신 촬영하듯이,
테스트를 진행하기 어려운 경우,
이를 대신해 테스트를 진행할 수 있도록 만들어주는 객체를 말합니다.
정리해서, 복잡한 시스템의 특정 부분을 독립적으로 테스트 하기 위한 객체 입니다.
스텁과 목의 차이는 검증하려는 목적에 있습니다.
Stub 은 상태를 검증 (State Verification)
어떤 기능을 요청하고 내부적인 상태가 어떻게 바뀌었는 지에 초점
MailServiceStub mailer = new MailServiceStub();
...
order.fill(warehouse);
...
// 상태 검증 : 메일이 몇 번 전송되었는지 확인
assertEquals(1, mailer.numberSent());
Mock 은 행위를 검증 (Behavior Verification)
when(send) 했을 떄 어떤 값을 return 하는지와 같은 행위에 초점
MailService mailer = mock(MailService.class);
...
order.fill(warehouse);
...
// 행위 검증: 메일 전송(send)이 한 번 호출되었는지 확인
verify(mailer, times(1)).send();
인프런 - Practical Testing: 실용적인 테스트 가이드 (박우빈)
Test Doubles
https://martinfowler.com/bliki/TestDouble.html
https://tecoble.techcourse.co.kr/post/2020-09-19-what-is-test-double/
Stub vs Mock
https://martinfowler.com/articles/mocksArentStubs.html