-
@SpyBean vs @MockBeanJava & Spring/기타 2021. 10. 11. 15:44반응형
SpyBean vs MockBean
- SpringBoot 1.4 부터 추가된 Annotation
SpyBean
- 클래스 레벨, @Configuration 클래스의 필드, @RunWith 클래스의 필드에 적용 가능 가능
- 같은 컨텍스트 안의 빈은 spy로 선언된 빈으로 래핑된다.
- Given에서 선언한 코드 외에 전부 실체 객체를 사용
-
@SpyBean private MyService myService; doReturn(myObject) .when(myService) .getMyObject(params..);
- myService의 getMyObject라는 메소드는 위에서 정한 parameter로 호출할 때, myObject라는 객체를 리턴해주도록 설정해준다.
이외의 모든 메소드, 필드 등은 실체 객체를 사용하게 된다.
-
- 특정 기능만을 변경해서 테스트에 사용하고 싶은 경우,
@SpyBean
을 활용하면 된다. - 주의사항
- 단위 테스트에서
@SpyBean
을 통해 테스트하려는 경우, 테스트 범위가 너무 커지고 통합테스트와 다름 없는 테스트가 되지 않는지 먼저 확인한다.- 특정 단위만 테스트하면 되는 경우에는
Mock
으로 구현하는 것이 더욱 효율적
- 특정 단위만 테스트하면 되는 경우에는
- 단위 테스트에서
MockBean
- Spring
ApplicationContext
에 mock을 추가하는 Annotation - 클래스 레벨, @Configuration 클래스의 필드, @RunWith 클래스의 필드에 적용 가능
- 컨텍스트에 정의된 기존의 동일한 타입 빈은 MockBean으로 대체
Mock = 껍데기만 있는 객체
- MockBean은 기존에 사용되던 Bean의 껍데기만 가져오고 내부의 구현은 사용자에게 위임한 형태
- 즉, Bean의 어떤 메소드에 어떤 값이 들어왔을 때, 어떤 값이 리턴되어야 할지를 테스트를 작성하는 개발자가 조작하여야 함
- 기존에 사용되던 스프링 Bean이 아닌 Mock Bean을 주입
-
@MockBean private MyService myService; given(myService.getMyObject(params..)) .willReturn(myObject);
given
에서 선언한 코드 외에는 전부 사용할 수 없음.- given
- 해당 Mock Bean이 어떤 행동을 취하면 어떤 결과를 반환한다를 선언
Reference
반응형'Java & Spring > 기타' 카테고리의 다른 글
Arcus (0) 2021.09.30 외부 통신 - (RestTemplate, AsyncRestTemplate, WebClient, HttpURLConnection, HttpClient ) 간략 정리 (0) 2021.07.29 Spring Boot 롬복 및 테스트 트러블 슈팅 (0) 2021.02.15