Mockito란?
개발자가 동작을 직접 제어할 수 있는 가짜 객체를 지원하는 테스트 프레임워크다. 단위테스트 작성을 용이하게 하기 위해 가짜 객체를 주입해준다.
- @Mock: Mock 객체를 만들어 반환해주는 어노테이션
- @Spy: Stub하지 않은 메소드들은 원본 메소드 그대로 사용하는 어노테이션 (외부 라이브러리를 이용한 테스트에 사용할 것을 추천)
- @InjectMocks: @Mock 또는 @Spy로 생성된 가짜 객체를 자동으로 주입시켜주는 어노테이션
Service 테스트를 작성할 때는 @Mock으로 가짜 repository 객체를 만들고, @InjectMocks를 통해 Service에 주입할 수 있다.
Mockito와 Junit의 결합
Mockito 테스팅 프레임워크를 Junit5과 연동하기 위해서 붙여주는 클래스 어노테이션이 @ExtendWith(MockitoExtension.class)이다.
Stubbing
가짜 객체 생성의 가짜 객체의 동작을 지정하는 것을 Stubbing이라고 한다.
- 특정 매개변수를 받았을 때 특정 값을 반환하거나 예외를 던지도록 설정할 수 있다.
ex) when / thenReturn
- thenReturn() 메서드나 thenThrow() 메서드를 이어 붙이는 구조를 사용하여 동일한 메서드가 여러 번 호출될 때 각각 다르게 행동하도록 할 수 있다.