[ SourceCode 참고]

https://github.com/jjangsky/Testing-study

개념 정리

Test Double

소프트웨어 개발에서 테스트하는 데 도움을 주기 위해 사용되는 개념

주로 단위 테스트 시에 사용되며, 코드의 특정 부분을 대신하여 테스트 가능한 상태로 만들어주는 객체나 함수를 말함

Dummy : 아무것도 하지 않는 깡통 객체

Fake : 단순한 형태로 동일한 기능은 수행하나, 프로덕션에서 쓰기에는 부족한 객체

Stub : 테스트에서 요청한 것에 대해 미리 준비한 결과를 제공하는 객체, 그 외 응답 X

Spy : Stub 이면서 호출된 내용을 기록하여 보여줄 수 있는 객체

→ 일부는 실제 객체처럼 동작 시키고 일부만 Stubbing 할 수 있다.

Mock : 행위에 대한 기대를 명세하고, 그에 따라 동작하도록 만들어진 객체

<aside> 💡 StubMock 에 차이점을 설명하자면 검증의 목적에 따라 다르다. Stub 은 상태 검증을 목적으로 두고 Mock 은 특정 행위에 대한 검증을 한다.

</aside>

Production Code

※이전에 작성한 메일 발송 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;
  }
}

Test.1 - 순수 Mockito Test(단위 테스트)