on
Spring Test Code, Mock 의 Stubbing 이란?
Spring Test Code, Mock 의 Stubbing 이란?
Mock 객체 Stubbing
많은 테스트가 있다. controller, service, repository, util 등등 테스트 할 것이 많다.
그 중 일반적으로 service 클래스는 많은 의존성을 가지는데, 단순 테스트를 위해서 해당 의존성을 전부 채워 넣어주는 것은 어렵다.
이럴 때 사용하는 것이 바로 Mock 객체이다.
그런데, 요즘은 @SpringBootTest 어노테이션이 테스트할 때 의존성을 관리해주기 때문에, Mock 을 많이 사용하지 않는 것 같기도 하다. (나만 그럴수도..)
그런데, 간혹 해당 메소드가 호출 되었는지만 확인하고, 실제 메소드가 동작 하면 안되는 경우가 있다.
예를 들면, 외부 API 를 호출할 때 마다 금액이 발생 한다던지... 아니면 테스트 용도의 환경에서는 사용할 수 없는 의존성 이라던가 하는 것 말이다.
이럴 때, Mock 을 사용해서, 실제 객체가 아니라 가짜 객체가 동작하도록 할 수 있다.
이 때, Mock 객체의 메소드를 호출했을 때, 실제로 어떤 동작이 일어 날지를 정의할 수 있다. (return 값을 조정하거나, 필드 값을 변화시키거나)
이것을 바로 Stubbing 이라고 한다.
Mock 객체의 기본 동작
Stubbing 을 해주지 않아도 기본적으로 Stubbing 되어 있는데, 해당 동작은 다음과 같다.
리턴 값이 있는 메소드는 모두 null 을 리턴한다. Optional 타입인 경우 Optional.empty 리턴
primitive 타입을 리턴하는 경우엔 초기값을 반환한다. boolean 경우 'false' / int 인 경우 0 wrapper 클래스도 동일하게 반환한다. (Boolean, Integer)
Collection의 경우 모두 비어있는 Collection를 리턴한다.
void 메소드의 경우 예외를 던지지 않고 아무 일도 발생하지 않는다.
// mock 객체 주입 @Mock private UserService userService; @Test public void test() { String token = "test token"; UserDTO dto = new UserDTO(); // Mock 객체 Stubbing Mockito.when(userService.save(token, dto)).thenReturn(1); }
같은 조건의 token 과 dto 를 사용하면 1 값을 리턴하도록 stubbing 했다.
from http://way-be-developer.tistory.com/284 by ccl(A) rewrite - 2021-12-19 03:28:01