-
@Mock, @MockBeanSTUDY/백엔드 2021. 2. 3. 17:06
1. @Mock
- org.mockito.Mock
- Mockito 라이브러리 내에 위치한다.
- when이나 given 등을 이용해서 mock 객체가 특정 메서드를 호출했을 때, 동작하는 방식을 설정해 줄 수 있다.
- spring에서 어느 의존성도 필요하지 않을 때 사용된다.
- @InjectMocks과 함께 사용될 수 있다. @Mock 객체를 @InjectMocks 객체에 주입시킬 수 있다.
@Mock
private TestMapper testMapper;
@InjectMocks
private TestService testService;
@BeforeEach
void init() { this.testService = new TestService(testMapper);}
@Test
void test() throws IOException {
//given
String name = "test";
// when
testService.test(name);
// then
verify(testMapper, atLeastOnce()).selectTest(name);
}2. @MockBean
- org.springframework.boot.test.mock.mockito.MockBean
- 스프링 부트 테스트 패키지 내에 위치한다.
- MockBean을 사용하면 테스트하려는 객체 내에서 기존에 등록된 Bean이 아닌, MockBean을 주입한다.
- @SpringBootTest나 @WebMvcTest와 함께 사용하며, given, when, then을 사용하여 Mock 객체의 행위를 정의해 줄 수 있다.
- Mockito의 Mock객체들을 spring의 ApplicationContext에 넣어준다. 동일한 타입이 존재할 경우 MockBean으로 교체한다.
- Spring Container가 관리하는 bean들 중 하나 이상을 Mocking하고 싶을 때 사용한다.
@WebMvcTest(TestApiController.class)
@ExtendWith({SpringExtension.class, MockitoExtension.class})
class TestApiControllerTest {
@Autowired
private MockMvc mockMvc;
@MockBean
private TestService testService;
@Test
void test() {
// given
String value = "test!!";
when(testService.getTest("test")).thenReturn(value);
// when
mockMvc.perform(get("/api/test/{testId}", 1)
.param("name", "test")
.andExpect(status().isOk())
.andExpect(content().string("test!!"));
// then
verify(testService, atLeastOnce()).getTest("test");
}
}'STUDY > 백엔드' 카테고리의 다른 글
메모리 영역 (0) 2021.02.08 RestTemplate & WebClient (0) 2021.02.03 @ControllerAdvice / @RestControllerAdvice (0) 2021.02.03 Bean (0) 2021.01.05 Mybatis (0) 2020.12.31