강의

멘토링

로드맵

Inflearn brand logo image

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

wnsqud70님의 프로필 이미지
wnsqud70

작성한 질문수

토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1

회원 애플리케이션 서비스 테스트 (2)

안녕하세요 토비님!

작성

·

52

0

안녕하세요 토비님! 강의를 보다가 궁금한 점이 생겨서 질문 드립니다.

테스트 코드 작성시 EmailSender같은 경우나 , 외부 요인(?) 같은 경우에 저는 테스트 코드가 외부요인에 의해 영향받기를 원하지 않아 @MockitoBean을 사용하는데요 그런데 강의에서는 왜 @MocktioBean을 사용하시지 않고 @TestConfiguration을 사용하셨는지 궁금합니다!

감사합니다!

답변 2

1

토비님의 프로필 이미지
토비
지식공유자

@MockitoBean이 테스트 작성에 유용한 방법이지만 단점도 있습니다.

해당 빈이 목/스텁으로 어떻게 동작을 해야하는지 매번 테스트에 정의를 해줘야 합니다. 또, 목 인스턴스를 만드는 작업이 테스트 런타임에 일어나는데 이게 꽤 무거운 작업이라 테스트 수행속도가 느려집니다.

그럼에도 @MockitoBean은 해당 의존 오브젝트가 테스트 목적에 따라 다른 방식으로 동작해야 하는 경우엔 디테일한 설정을 할 수 있기 때문에 유용합니다.

저는 EmailSender 같은, 거의 대부분의 테스트에서 한번씩은 실행이 되지만 테스트마다 동작을 다르게 구성할 필요가 없는 케이스는 @MockitoBean 대신 테스트용 빈을 따로 정의해서 사용하는 걸 선호합니다.

wnsqud70님의 프로필 이미지
wnsqud70
질문자

답변 감사드립니다!!

0

안녕하세요, 인프런 AI 인턴입니다. wnsqud70님.
테스트 코드 작성시 외부 의존성을 Mocking하는 방법은 여러 가지가 있으며, 상황에 따라 적절한 방법을 선택할 수 있습니다.

  1. @TestConfiguration 사용:

    • 이 방법은 특정 테스트 환경에서만 유효한 설정을 제공하기 위해 자주 사용됩니다.
    • 커스텀한 Bean 설정이 필요한 경우, 테스트 환경에 맞게 재정의할 수 있는 유연성을 제공하기 때문에 유용합니다.
  2. @MockitoBean 사용:

    • Mockito를 사용하여 외부 의존성을 Mock으로 대체하여 테스트 코드가 외부 요인에 영향을 받지 않도록 해줍니다.
    • MockBean을 사용할 경우, 필요한 최소한의 Mock 행동만 정의하여 빠르고 간단한 단위 테스트를 작성할 수 있습니다.

강의에서 @TestConfiguration을 사용한 이유는, 아마도 강의 내용에서 이러한 설정을 직접 제어하고, 커스텀한 설정을 보여주기 위한 의도가 있지 않을까 생각됩니다. @MockitoBean 은 빠르게 외부 요인을 Mocking할 때 유용하지만, 스프링 컨텍스트의 전반적인 설정을 제어하는 데는 @TestConfiguration이 더 적합한 경우가 있습니다.

만약 스프링에서의 설정이나 의존성 관리의 이해도를 높이는 것을 목표로 수업이 구성되어 있다면, Test Configuration을 통한 테스트가 더 자연스러울 수 있습니다.

아래 관련된 강의 질문을 참고하시면 도움이 되실 것 같습니다:
- @TestConfiguration 관련 설명과 실제 동작이 다른 부분이 있는 것 같습니다.

테스트 환경을 설정할 때, 어떤 상황에 어떤 방법을 사용하는 것이 최적일지를 이해하고 선택할 수 있도록 다양한 접근을 경험해보시는 것을 추천드립니다.

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

wnsqud70님의 프로필 이미지
wnsqud70

작성한 질문수

질문하기