[JUnit & Mockito] Controller Unit Tests with Service using @MockBean

원알렉스·2020년 8월 28일
2

JUnit & Mockito

목록 보기
7/9
post-thumbnail

🚀 Controller Unit Tests with Service

만약 테스트할 컨트롤러가 의존성이 있는 서비스 빈이 있다면 스프링 부트에서 제공해주는 @MockBean 어노테이션을 통해서 해당 빈을 주입시키고 Mock Object로 생성해줍니다.

그다음에 똑같이 해당 Mock Object 가 가질 행동(Behavior)을 지정해주면 됩니다.

@WebMvcTest(ItemController.class)
class ItemControllerTests {

    @Autowired
    private MockMvc mockMvc;

    @MockBean
    private ItemService itemService;
    
    @Test
    public void getItem_fromBusinessService() throws Exception {

        // mock the behavior for the service
        when(itemService.findItem(anyLong()))
                .thenReturn(new Item(1L, "Mac Book Pro", 10, 100));

        RequestBuilder request = MockMvcRequestBuilders
                .get("/service/items/1")
                .accept(MediaType.APPLICATION_JSON);

        MvcResult result = mockMvc
                .perform(request)
                .andExpect(status().isOk())
                .andReturn();

        String actualResponse = "{\"id\":1,\"name\":\"Mac Book Pro\",\"price\":10,\"quantity\":100}";
        JSONAssert.assertEquals(result.getResponse().getContentAsString(), actualResponse, true);
    }
}
profile
Alex's Develog 🤔

0개의 댓글