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

+ Recent posts