ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • @Mock, @MockBean
    STUDY/백엔드 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
Designed by Tistory.