Spring
- Mockito 기초
Mockito는 Mock이라는 가짜 객체를 이용해 테스트를 용이하게 해주는 프레임워크이다.
Mock 객체는 실제 사용하는 모듈을 사용하지 않고 실제의 모듈을 "흉내"내는 "가짜" 모듈을 작성하여 테스트의 효용성을 높이는 데 사용하는 객체이며 Mockito의 핵심이다.
Mock 생성에는 크게 4가지 annotation이 사용된다. 바로 @Mock, @MockBean, @Spy, @InjectMocks
먼저 @Mock과 @MockBean은 가짜 객체 생성을 하는 어노테이션으로 쓰임새는 비슷하지만 약간의 차이점이 있다.
Spring Boot Container가 테스트 시에 필요하고, Bean이 Container에 존재한다면 @MockBean을 사용, 아니라면 @Mock 을 사용하라고 한다.
예를 들면 Service 테스트에 Repository의 주입은 필수적인데 우리는 이 repository를 사용하지는 않는다.(DB에 잘 저장되었는 지는 Repository 테스트를 따로 하기 때문에)
따라서 주입할 repository는 명목상 필요하고 repo의 메소드는 필요없기 때문에 @Mock을 선언해준다.
그러나 Controller 테스트에서 Service의 주입은 필수적임과 동시에 Service 내의 메소드를 호출해야 그 반환값이 Response로 쓰이는 경우가 많다. 이 때는 Service를 Bean으로 등록해야하기 때문에 @MockBean 을 사용한다고 나는 이해했다.
공통으로 이 가짜 Mock 객체가 어떤 기능을 하게 하고 싶다면 stubbing이라고 mock 객체 내의 메소드를 지정해주면 된다.
@Spy는 실제 사용되는 객체이다. (가짜 mock 사이의 진짜 spy라는 뜻인가?)
이 어노테이션을 쓰면 stubbing을 따로 하지 않으면 기존 객체의 실제 로직을 수행한다.
@InjectMocks 생성된 Mock 객체들을 자동으로 주입해주는 어노테이션이다.
public class CommentSerivce() {
UserService userService;
ToDoCardService toDoCardService;
}
이렇게 생긴 CommentService가 있다고 했을 때
@Mock
UserService userService;
@Mock
ToDoCardService toDoCardService;
@InjectMocks
CommentService commentService;
이렇게 해주면 @Mock으로 생성된 userService와 toDoCardService가 자동 주입된다.
알고리즘
- 프로그래머스 : 과제 진행하기(Level 2, 스택)
느낀 점
.
'TIL' 카테고리의 다른 글
[23.12.05] (1) | 2023.12.06 |
---|---|
[23.12.01] (0) | 2023.12.04 |
[23.11.29] (0) | 2023.11.29 |
[23.11.28] (0) | 2023.11.28 |
[23.11.22] (1) | 2023.11.22 |