[ SourceCode 참고]
https://github.com/jjangsky/Testing-study
Test Double
소프트웨어 개발에서 테스트하는 데 도움을 주기 위해 사용되는 개념
주로 단위 테스트 시에 사용되며, 코드의 특정 부분을 대신하여 테스트 가능한 상태로 만들어주는 객체나 함수를 말함
Dummy
: 아무것도 하지 않는 깡통 객체
Fake
: 단순한 형태로 동일한 기능은 수행하나, 프로덕션에서 쓰기에는 부족한 객체
Stub
: 테스트에서 요청한 것에 대해 미리 준비한 결과를 제공하는 객체, 그 외 응답 X
Spy
: Stub 이면서 호출된 내용을 기록하여 보여줄 수 있는 객체
→ 일부는 실제 객체처럼 동작 시키고 일부만 Stubbing 할 수 있다.
Mock
: 행위에 대한 기대를 명세하고, 그에 따라 동작하도록 만들어진 객체
<aside>
💡 Stub
와 Mock
에 차이점을 설명하자면 검증의 목적에 따라 다르다.
Stub
은 상태 검증을 목적으로 두고 Mock
은 특정 행위에 대한 검증을 한다.
</aside>
※이전에 작성한 메일 발송 Service 로직과 동일하다.
@Service
public class MailService {
private final MailsendClient mailsendClient;
private final MailSendHistoryRepository mailSendHistoryRepository;
public boolean sendMail(String fromEmail, String toEmail,
String subject, String content) {
boolean result = mailsendClient.sendEmail(fromEmail, toEmail, subject, content);
if(result){
mailSendHistoryRepository.save(MailSendHistory.builder()
.fromEmail(fromEmail)
.toEmail(toEmail)
.subject(subject)
.content(content)
.build()
);
return true;
}
return false;
}
}