Web

@MockBean vs @SpyBean 차이점

송코딩 songcoding 2023. 12. 5. 23:43

안녕하세요,

송아지할때 송아 김송아입니다.

 

 

아마 이 글에 들어오셨다면, @MockBean과 @SpyBean의 차이점이 궁금하실 것 같아서!

코드 보다는 개념과 의미에 집중해서 설명드리도록 하겠습니다. 

 

글이 짧으니 천천히 차근차근 읽어보셔요!!

 

💡 참고로 이 글은 2023년 11월에 오프라인으로 출강을 했던 스프링 강의 중 질문 주신 내용을 바탕으로 작성되었습니다.
      보고 계시죠?! 🥹 개념을 이해하시는 데에, 도움이 되셨으면 좋겠습니다!!

 

 


 

 

MockBean과 SpyBean의 차이점을 설명드리기 위해 먼저 MockBean의 개념부터 알아보겠습니다.

 

 

🚀 @MockBean

쉽게 말해서 껍데기만 있는 객체를 말합니다.

구현 코드에서 스프링이 관리하는 스프링 빈(Bean)의 껍데기만 사용하는 것이고, 안은 텅텅~ 비어있습니다.

 

 

자바에서 상속으로 비유 해보자면,

✔️ 부모 클래스의 ✨모든 메소드✨를 Override해서 재구현 해야 사용할 수 있는 상황으로 볼 수 있습니다.

      즉, 상속이라기 보단 '텅텅 빈 인터페이스를 implements 한다' 라고 표현하는 것이 맞겠네요!

✔️ 만약 Override 하지 않는 다면, 그 기능은 사용할 수 없는 것이죠.

 

 

어떤 메소드 실행을 요구하면, 어떤 값을 반환할지

구현 코드 내용은 전체 무시하고, 테스트 코드에서 새롭게 짜는 것을 말합니다.

 

어디서 새롭게 짜냐구요?
바로, given - when - then 패턴에서 given 파트입니다.

  • given : 테스트 코드를 수행하기 위한, 객체 기능을 "모~두" 정의하는 단계
  • when : 정의한 객체를 테스트(사용)하는 단계
  • then : 테스트(사용) 결과가 맞는지 검증하는 단계

 


 

 

이번엔 SpyBean입니다.

 

🚀 @SpyBean

다른 어노테이션인 SpyBean은, 테스트 코드에서 말 그대로 스파이 역할을 하는 MockBean입니다. 

 

 

자바에서 상속으로 비유 해보자면, 

✔️ 부모 클래스의 메소드 중 🔥일부만 Override해서 재구현🔥하고 나머지는 부모 클래스의 메소드를 그대로 쓰는 상황입니다.

 

 

given-when-then 패턴으로 비교해보자면,

 

given 부분에서

🤔 MockBean : 테스트 코드에 사용될 객체의 기능들을 선언할 때 전체 덮어쓰기를 하냐

🤔 SpyBean : 부분 덮어쓰기를 하고 나머지 기능은 스프링 빈 구현 기능을 그대로 사용하는 것의 차이인 것이죠.

 

 


 

정리해볼까요?

 

 

MockBean과 SpyBean의 대표적인 차이점은 다음과 같습니다.

 

@MockBean은 
테스트코드에서 스프링빈의 구현 기능을 몽땅 덮어써서 쓰는 객체라면

@SpyBean은 테스트 코드에서 스프링빈의 구현 기능을 일부만 덮어쓰고, 
덮어쓰지 않은 기능은 스프링빈 기능을 그대로 사용하는 객체

 

 

 

 

 

 

 

이미 현업에서 유려하게 사용하고 계실 것 같아서 (또는 이미 코드에서 쓰고 계신 멋진 개발자 지망생분들이실 것 같아서)

코드보다는 차이점 설명을 최대한 이해가 쉽도록 표현해봤습니다😊

 

 

ps. 혹시 코드가 필요하시다면, 개인적으로 아래 블로그가 정리를 잘 해두신 것 같아 추천 드려봅니다.

 

SpringBoot @MockBean, @SpyBean 소개

안녕하세요? 이번 시간엔 SpringBoot의 @MockBean, @SpyBean 예제를 진행해보려고 합니다. 모든 코드는 Github에 있기 때문에 함께 보시면 더 이해하기 쉬우실 것 같습니다. (공부한 내용을 정리하는 Github

jojoldu.tistory.com

 

 

 

이 글을 읽으시는 모~든 분들!

읽어보시고 언제든 추가 설명이 필요하시다면 댓글로 알려주세요 😊

 

조금이라도 도움이 될 수 있다면, 저는 글 쓰는 맛이 나버리지요..💚

 

 

감사합니다!

 

모두 따뜻한 연말 되세요.

김송아 드림

 

 

 

 

아니 근데 끄기 전에 잠깐,

옆집 사는 김송아가 유데미 강의를 냈다고?

 

옆집 개발자 지금 구경가기 👇🏻