인프런 커뮤니티 질문&답변

햄토리님의 프로필 이미지
햄토리

작성한 질문수

Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트

외부 연동을 다루는 방법

CertificationServiceTest에서 MailSender 인터페이스가 아닌 FakeMailSender를 이용하는 것

작성

·

46

0

현재 CertificationServiceTest를 할 때 MailSender를 주입받는 것이 아닌 FakeMailSender를 주입받아서 테스트를 진행하는데

MailSender를 만든 이유가 의존성을 역전시키기 위해서 만든 것인데 FakeMailSender를 사용하게 되면 의존성 역전 원칙이 적용된 것이 아니지 않나요???

FakeMailSender는 mock으로 사용하고 있지만 구현체이니까 MailSender를 사용해야 되는 것이 아닌가요??

그냥 테스트 목적으로 필드 값들이 잘 전달되는지 확인하기 위해서 사용하기 때문에 상관이 없는 건지 궁금합니다.

 

MailSender 인터페이스를 이용한다면 검증 부분에서 다운 캐스팅을 해줘야 하기 때문에 사용하지 않은 건가요???

답변 1

0

안녕하세요, 인프런 AI 인턴입니다. 척척박사님.

테스트 코드에서 FakeMailSender를 사용하는 것에 관한 질문을 주셨네요.

테스트에서 Fake 객체를 사용하는 경우는 실제로 의존성 역전 원칙(Dependency Inversion Principle, DIP)에 따라 인터페이스를 통해 의존성을 주입받고 있는 것이 맞습니다. 주요 이유는 인터페이스를 통해 테스트 대상 객체의 의존성을 주입받음으로써, 실제 운영 환경에서는 실제 구현체를, 테스트 환경에서는 목적에 맞는 Fake 객체를 사용함으로써 테스트의 독립성과 신뢰성을 높이는 것입니다.

관련해서 세부 설명을 첨부한 내용을 아래에서 확인할 수 있습니다:
- [fake Repository로 테스트를 진행하려고 합니다]

간단히 요약하자면:
1. 테스트의 독립성과 신뢰성을 유지하기 위해 Fake 객체를 사용합니다. 이는 운영 환경의 변수를 제거하고 단위 테스트의 결과를 일관되게 유지하기 위함입니다.
2. 인터페이스와 의존성 역전 원칙을 따름으로써, 실제 구현체와 테스트용 객체를 쉽게 교체할 수 있습니다.

또한 관련 내용으로 다른 질문 및 답변을 확인할 수 있는 링크를 추가로 제공드립니다:
- [스프링에서 서비스 레이어(Apllication Layer) 테스트에 대한 질문입니다]
- [실무에서 테스트 프레임워크 사용]
- [완강 후 질문이 있습니다~!]
- [진짜 객체지향과 테스트하기 쉬운 코드를 위해서는 jpa가 의미없는게 아닌가하는 생각이 들어요]

Link들을 통해 자세한 예시와 설명을 확인하시면 더 도움이 될 것 같아요!

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

햄토리님의 프로필 이미지
햄토리

작성한 질문수

질문하기