본문 바로가기
Web/Spring Boot

[Mockito] spyBean vs mockBean

by foreverever 2022. 7. 10.
반응형

@MockBean : given에서 선언한 코드에서만 사용할 수 있음

@SpyBean : given에서 선언한 코드 외에는 전부 실제 객체의 것을 사용

 

이미 존재하는 Bean을 SpyBean으로 Wrapping한 형태

기본적인 개념은 조금 다르나 사용법은 @MockBean과 @SpyBean은 동일

 

 

간략한 특징은

- MockBean은 가짜객체이므로 given에서만 개발자의 모의코드를 지정할 수 있음

이에, 실제 데이터베이스 연동되는 로직이 있어도 가짜 객체이므로 연동되지 않음

 

- SpyBean은 진짜객체이므로, 특정 given에서 개발자의 모의코드를 지정할 수 있음, 대신 given이 아닌 행위에 대해서는 실제 객체로 동작, 이에 구현된 로직이 실제 수행되며, 데이터에비스 연동이 실제로 이루어짐

 

 

- 참고 -

Mock, Spy는 활용도가 굉장히 높습니다.
테스트해야할 메소드의 validation 을 무시하도록 설정하기도 하고, 외부 API와 굳이 연동할 필요 없이 테스트를 수행하기도 하고, DB에 데이터 입력 없이 테스트를 수행하기도 하고, 불필요한 필드 데이터는 채우지 않고도 테스트를 수행할 수도 있습니다. 물론 모든 테스트를 다 Mock, Spy만으로 할수는 없습니다.
통합 테스트 코드는 분명 필요해서 모든 메소드를 정상코드로 테스트하는 코드도 필요하지만, 단위 테스트로 쪼개서 테스트할때는 Mock, Spy를 적극적으로 활용하시는 것을 추천드립니다.

 

출처

https://github.com/mockito/mockito/wiki/Mockito-features-in-Korean

반응형

'Web > Spring Boot' 카테고리의 다른 글

[DI] 생성자 주입을 사용하자  (0) 2022.06.21
@EventListener & @PostConstruct  (0) 2022.06.09
[Spring] @RestControllerAdvice  (0) 2019.07.16
[Spring] AOP  (0) 2019.06.26
[Spring] DI (Dependency Injection)  (0) 2019.06.24