728x90
학습 목표
- Mock의 의미를 이해할 수 있다.
테스트 세계에서의 Mock은 바로 가짜 객체를 의미한다.
Mock객체를 사용하는 이유
![](https://blog.kakaocdn.net/dn/lWeHK/btrQRG3EBv0/13AIxX7xIOFOXkUues08ok/img.png)
위 그림을 보면 MemberController의 postMember() 핸들러 메서드쪽만 테스트해야 되는데 서비스 계층을 거쳐 데이터 액세스 계층 그리고 데이터베이스까지 그 동작 흐름이 끝까지 이어졌다가 되돌아 오기 때문에 슬라이스 테스트라기 보다 통합 테스트에 가깝다.
슬라이스 테스트의 목적은 해당 계층 영역에 대한 테스트에 집중하는 것이다.
![](https://blog.kakaocdn.net/dn/bcIGOq/btrQPjH7QMq/TSsJqQiPQ0yIbSZT3oNwnK/img.png)
MemberController에서 MemberService 클래스의 createMember()를 호출하지 않고, MockMemberService 클래스의 createMember()를 호출한다. Mock객체를 이용함으로써 다른 계층과 단절되어 불필요한 과정을 줄일 수 있다.
- Mockito는 Mock 객체를 생성하고, 해당 Mock 객체가 진짜처럼 동작하게 하는 기능을 하는 Mocking framework(또는 라이브러리)이다.
- @MockBean 애너테이션은 Application Context에 등록되어 있는 Bean에 대한 Mockito Mock 객체를 생성하고 주입해주는 역할을 한다.
- Junit에서 Spring을 사용하지 않고 순수하게 Mockito의 기능만을 사용하기 위해서는 @ExtendWith(MockitoExtension.class)를 클래스 레벨에 추가해야 한다.
- @Mock 애너테이션을 추가하면 해당 필드의 객체를 Mock 객체로 생성한다.
- @Mcok 애너테이션을 통해 생성된 Mock 객체는 @InjectMocks 애너테이션을 추가한 필드에 주입된다.
- Mockito의 기본 사용법을 이해할 수 있다.
- 비즈니스 로직의 단위 테스트에 Mockito를 적용할 수 있다.
- Controller의 슬라이스 테스트에 Mockito를 적용할 수 있다.
728x90
'TIL' 카테고리의 다른 글
[Spring MVC][API 문서화] (0) | 2022.11.11 |
---|---|
[SpringMVC][TDD] (0) | 2022.11.10 |
[Spring MVC][Slice Test] (0) | 2022.11.09 |
[JUnit으로 비즈니스 로직에 단위 테스트 적용하기] (0) | 2022.11.09 |
[Spring][Hamcrest] (0) | 2022.11.09 |