HOME
home
Team
home

Spring

STUDY RECORDS
기록
키워드

Swagger

implementation group: 'org.springdoc', name: 'springdoc-openapi-starter-webmvc-ui', version: '2.3.0'
Bash
복사

Mock과 MockBean의 차이

@Mock:
Mockito 라이브러리에서 제공하는 애노테이션으로, 테스트 코드 내에서 가짜 객체를 생성
스프링 컨텍스트와 무관하게 동작하며, 주로 단위 테스트에서 사용
객체의 의존성을 주입하기 위해 @InjectMocks와 함께 사용
@MockBean:
스프링 부트에서 제공하는 애노테이션으로, 스프링 애플리케이션 컨텍스트에 모의 객체를 등록
주로 통합 테스트에서 사용되며, 실제 스프링 컨텍스트를 로드하여 동작
스프링의 @Autowired 또는 다른 DI 방법을 통해 주입
1.
컨텍스트 통합: @MockBean은 스프링 애플리케이션 컨텍스트에 통합되어 모킹된 객체를 빈으로 대체합니다. 반면 @Mock은 단순히 Mockito를 통해 모킹된 객체를 생성하며 스프링 컨텍스트와는 별개입니다.
2.
주입 방식: @Mock은 Mockito의 @InjectMocks을 사용하여 주입되며, @MockBean은 스프링의 @Autowired로 주입됩니다.
3.
사용 시점: 스프링 부트 통합 테스트에서는 @MockBean을 사용하는 것이 일반적이며, 순수한 단위 테스트에서는 @Mock을 사용하는 것이 일반적입니다.

결론:

@Mock을 사용했을 때 테스트가 실패하는 이유는 모킹된 객체가 스프링 컨텍스트에 주입되지 않기 때문입니다. 반면 @MockBean을 사용하면 모킹된 객체가 스프링 컨텍스트에 주입되므로, 스프링이 관리하는 빈들이 올바르게 모킹된 객체로 대체되어 테스트가 성공하게 됩니다.