모나리자몽
75
2020-09-20 23:25:07 작성 2020-09-20 23:28:00 수정됨
0
123

스프링부트 빈 생성에러 질문좀 드립니다...


안녕하십니까 스프링 공부중인 한 학생입니다.

우선 현재 제 어플리케이션 에서 컨트롤러 부분은 다음과 같습니다.

RestaurantController

@RestController
public class RestaurantController {

@Autowired
private RestaurantService restaurantService;

@GetMapping("/restaurants")
public List<Restaurant> list(){
return restaurantService.getRestaurants();
}     ..... }

MenuItemController

@RestController
public class MenuItemController {

@PatchMapping("/resturants/{restaurantId}/menuitems")
public String bulkupdate(){
return "";
}
}

그리고 MenuItemController에 대한 테스트코드입니다.

@ExtendWith(SpringExtension.class)
@WebMvcTest(RestController.class)
class MenuItemControllerTest {

@Autowired
private MockMvc mvc;

@Test
public void bulkupdate() throws Exception {
mvc.perform(MockMvcRequestBuilders.patch("/restaurants/1/menuItems"))
.andExpect(status().isOk());
}
}

이 테스트 코드를 작동시키면 다음과 같은 에러가 발생하는데요


RestaurantController에서 Service객체를 주입받지 못해서 applicationContext를 로드하지 못한다고합니다. 우선 service코드는 @Service 어노테이션을 붙여 준 상태입니다.

이 현상에 대해 다음의 의문점을 갖고 있습니다.

첫번째로 일단 MenuItem 컨트롤러를 테스트하는데 , service는 사용하지도 않았는데 왜 Restaurant 컨트롤러에서 객체주입 못받는 것이 에러인지 의문입니다.

두번째는 Restaurant 컨트롤러를 테스트하면 또 문제없이 된다는 점이 의문점입니다.

세번째는 service의 Autowired의 required=false 를 하면 문제가 해결된 것 테스트를 통과하는데 제가 아는 선에서는 이는 주입받을 객체가 없다면 주입하지 않는다는 의미인데, 이것이 왜 위의 오류를 해결하는지 모르겠습니다.

혹시 비슷한 현상을 겪어보셨거나 답을 아시는 분께 도움을 요청합니다... ㅜㅜ

0
  • 답변 0

  • 로그인을 하시면 답변 을 등록할 수 있습니다.