Mocking의 범위와 용도
Mock 객체를 만들 때 어느 범위까지 만들어야 하는가?
정답은 없지만 슬라이스 테스트에 적용을 고려했을 때에는 가능한 작은 단위의 테스트가 해당 계층 영역 내에서 실행되어야 하므로
실제 테스트를 수행할 객체가 의존하고 있는 컴포넌트 등을 대상으로 하자.
Controller에서 의존하고 있는 객체가 있다면 해당 객체에 대해서 Mock 객체를 사용하여 의존성을 일일이 제거해주어야 한다.
예를 들어 Controller 만을 테스트 하고자 할 때 해당 컨트롤러가 사용할 Service를 Mock 할 수 있다.
주의점
Mock을 사용하기 위해서는 내부 구현을 알아야 하며, 테스트 작성 시 테스트의 성공을 의도할 수 있기 때문에 완벽한 테스트라 보기 힘들다. 또 내부 구현이 변경됐을 때 테스트가 실패하지 않고 통과하게 되면서 혼란이 발생할 수 있으니 유의하여 적절한 경우에 사용하자.
적절한 사용 용도
- Mock은 주로 컨트롤하기 힘든 외부 api 등을 호출할 때
- LocalDate.now() 처럼 계속 변하는 시간의 순간
- 랜덤의 성격을 띄고 있는 함수
Mockito를 활용한 테스트 작성
- Mock 객체 만들기
- Mock 객체 Stubbing(Mock 객체의 행동 조작)
- Mock 객체의 행동 검증
Mock 객체 생성
@Mock 어노테이션 사용
@ExtendWith(MockitoExtesion.class)
class ServiceTest{
@Mock
MemberService memberService;
@Mock
MemberRepository memberRepository;
@Test
void testCode(){
//test code 작성
}
}
@Mock 어노테이션을 사용할 경우 MockitoExtesion 익스텐션을 추가해줘야 한다.
Reference
'Spring' 카테고리의 다른 글
[SpringBoot] MySQL 연동 (0) | 2022.09.16 |
---|---|
Slice Test (0) | 2022.09.14 |
스프링 DB 접근 기술 개요 (0) | 2022.08.30 |