1. @Mock / @MockBean / @Spy / @SpyBean / @InjectMocks
@Mock
- Mock(*.class)처럼 Mock 객체를 만드는 어노테이션.
- @SpringBootTest를 사용하지않고 mock객체를 사용할 수 있다.
- 따로 지정하지 않으면 0 또는 null의 Answers.RETURNS_DEFAULTS를 반환.
@InjectMocks
- Mock 객체를 자동으로 주입받을 수 있는 어노테이션.
- Mock 객체로 만든 다른 객체를 의존하고 있는 객체를 만들때 쓰인다.
- Mock, Spy 둘 다 의존성 주입이 가능하다.
@MockBean
- 스프링 빈에 등록된 실제 객체를 Mock 객체로 바꾸어서 사용할 수 있게 한다.
- 스프링 애플리케이션 컨텍스트에 Mock 객체를 등록.
- @SpringBootTest를 사용.
@Spy
- 일부 메소드는 실제 메소드를 사용하고자 할 때 사용하는 객체.
- Mock 객체는 모든 메소드를 Mocking 하는 반면, Spy는 기본적으로 실제 객체를 유지한다.
- 선별적으로 원하는 메소드만 Mocking하려고 할 때 사용한다.
@SpyBean
- 스프링 애플리케이션 컨텍스트에 등록되는 실제 객체를 Spy 객체로 대체하여 사용하는 어노테이션.
- @SpringBootTest를 이용한 통합테스트에 사용하고자 할 때 활용.