Mock이란?
Mock-up(목업)은 실제 제품 이전에 내부적으로 사용하기 위한 가짜 모형을 의미한다.
테스트에서는 가짜 객체를 의미한다.
Mock을 사용함으로써 불필요한 기능을 제거하고 원하는 영역만을 테스팅할 수 있다.
원래대로라면, 회원 등록 기능을 테스트하기 위해 데이터베이스까지 거쳐서 진행해야 하지만, 목업을 통해 이 연결을 끊고 가짜 객체로 대체하여 테스트할 수 있다.
Mockito란
이러한 Mock 객체를 생성하고, 해당 Mock 객체가 진짜처럼 동작하게 하는 역할을 Mockito가 해준다.
Mockito는 Stubbing 메서드를 지원하는데, given(가짜 객체의 메서드).willReturn(가짜 메서드가 반환할 데이터)
의 형식으로 사용할 수 있다. 이 Stubbing 메서드를 통해 테스트하고자 하는 계층을 제외한 나머지 계층과의 연동을 끊을 수 있다.
Mockito를 사용하기 위해서는 클래스 레벨에 @AutoConfigureMockMvc
,@SpringBootTest
애너테이션과 가짜 객체로 필요한 객체에 @MockBean
애너테이션을 붙여 사용할 수 있다.`
@SpringBootTest
@AutoConfigureMockMvc
class MemberControllerMockTest {
@MockBean
private MemberService memberService;
}
클래스 레벨에 @ExtendWith(MockitoExtention.class)
를 붙여 사용할 수 있다. 이 때 @Mock
애너테이션으로 객체를 Mock 객체로 생성할 수 있으며, @InjectMock
애너테이션으로 Mock 객체를 주입해줄 수 있다.
@ExtendWith(MockitoExtension.class)
public class MemberServiceMockTest {
@Mock
private MemberRepository memberRepository;
@InjectMocks
private MemberService memberService;
}