만약 테스트할 컨트롤러가 의존성이 있는 서비스 빈이 있다면 스프링 부트에서 제공해주는 @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);
}
}