1. Mokito
Mokito는 단위 테스트를 위한 mocking 프레임 워크이다.
쉽게 말해 가짜 객체인 Mock을 생성해주고 관리하고 검증할수 있도록 지원한다.
구현체가 없거나 의존성을 고려하지 않고 특정 단위만 테스트 할 수 있도록 환경을 만들어준다.
2. Mock객체
여기서 registerComment 메소드를 부르면 CommentDao의 insertComment가 실행되어야 한다고 하자.
이를 위해 테스트를 한다고 했을때 중점으로 볼 부분은 insertComment가 호출이 되었는지 아닌지 이다.
즉, 내부에 어떤 코드가 작성되어있는지는 관심없고 결과가 중요한 것이다.
registerComment 메소드의 단위 테스트를 실행하기 위해 Mock객체는 여기서 CommentDao를 가짜로 사용할 수 있게 지원한다.
이러면 나는 CommentDao의 구현에는 신경쓸 필요 없이 registerComment 메소드에 집중할 수 있게 되었다.
3. 예시 코드
Mockito.when(foodServiceImpl.save(request))
.thenReturn(response);
실제 사용했던 테스트 코드이다.
Mockito를 통해 mocking된 객체들의 행동을 정해줄 수 있다.
위 예시에서는 foodServiceImpl의 save 메소드로 request 매개변수를 넣어줬을때 response를 return한다 라는것이다.
foodServiceImpl의 save 메소드의 입출력을 임의로 설정한 것이다.
다음은 서비스 테스트 코드에서 사용했던 코드이다.
@ExtendWith(MockitoExtension.class)
public class FoodServiceTest {
@Mock
private FoodMapper foodMapper;
@Mock
private FoodRepository foodRepository;
@InjectMocks
private FoodServiceImpl foodServiceImpl;
@DisplayName("FoodRequestDto를 받아Entity로 바꾸고 저장")
@Test
void saveFood(){
// given
CreateFoodRequest foodDto = createFoodRequest();
Food mockedFood = Food.builder().build();
Mockito.when(foodMapper.toFood(foodDto))
.thenReturn(mockedFood);
Mockito.when(foodRepository.save(Mockito.any(Food.class)))
.thenReturn(mockedFood);
// when
CreateFoodResponse foodResponse = foodServiceImpl.save(foodDto);
// then
Assertions.assertThat(foodResponse)
.hasFieldOrPropertyWithValue("status",true);
Mockito.verify(foodMapper).toFood(foodDto);
Mockito.verify(foodRepository).save(mockedFood);
}
}
mock객체를 사용하면 실제 구현되어 있는 메소드에 영향을 주지 않기 때문에 좋다.
또한 마지막에 verify를 통해 실제 메소드가 사용되었는지 확인까지 할 수 있다.
위 코드 말고도 Mockito는 다양한 메소드를 제공한다.
참고
https://minkwon4.tistory.com/181
https://tecoble.techcourse.co.kr/post/2020-10-16-is-ok-mockito/
'개발 > Spring Boot' 카테고리의 다른 글
[Spring Boot] Spring-REST-Docs로 자동으로 API 문서화 (0) | 2023.07.17 |
---|---|
[Spring Boot] 오버로딩 언제 할 수 있을까 (0) | 2023.06.11 |
[Spring Boot] DI 구현 방법 3가지 (0) | 2023.05.26 |
[Spring Boot] dotenv(.env) 때문에 날려버린 2일 (0) | 2023.05.24 |
[Spring Boot] 어노테이션 정리 (0) | 2023.05.17 |