이전 노션 블로그의 Junit과 Mockito 기반의 Spring 단위 테스트 코드 작성법 (2023.03.13)로부터 마이그레이션된 글입니다.
개발자가 동작을 직접 제어할 수 있는 가짜(Mock) 객체를 지원하는 테스트 프레임워크다. 일반적으로 Spring을 개발하면 여러 객체들 간의 의존성이 생긴다. 이러한 의존성은 단위 테스트 작성을 어렵게 하는데, 이를 해결하기 위해 Mockito를 활용할 수 있다. Mock 객체를 주입시키고 원하는 결과를 stub하여 단위 테스트를 진행할 수 있다. 물론 Mock을 하지 않아도 된다면 하지 않는 것이 가장 좋다.
Mockito에서 Mock 객체의 의존성 주입을 위해서는 크게 3가지 어노테이션이 사용된다.
@Mock
: 가짜 객체. (Stubbing하지 않고 호출하면, 0
or null
반환)@Spy
: 진짜 객체. Stubbing할 수도 있고, Stubbing하지 않은 메소드는 원본대로 동작)@InjectMocks
: @Mock
또는 @Spy
로 생성한 Mock객체를 주입받음.예를들어
UserController
에 대한 단위 테스트를 작성하고자 할 때,UserService
를 사용하고 있다면@Mock
어노테이션을 통해 가짜UserService
를 만들고,@InjectMocks
를 통해UserController
에 이를 주입시킬 수 있다.
의존성이 있는 객체는 Mock 객체를 주입하여 어떤 결과를 반환하라고 정해진 답변을 준비시켜야 한다. Mockito에서는 다음의 stub 메소드들을 제공한다.
doReturn()
: Mock 객체가 특정한 값을 반환해야 하는 경우doNothing()
: Mock 객체가 아무것도 반환하지 않는 경우 (void)doThrow()
: Mock 객체가 예외를 발생시키는 경우@RunWith(MockitoJUnitRunnerclass)
@ExtendWith(MockitoExtension.class)
구체적인 예제는 다음을 참고하자