@WebMvcTest
public class ValidationTest {
@Autowired
private MockMvc mockMvc;
@Autowired
private ObjectMapper objectMapper;
@Test
@DisplayName("음식점 등록 이름 누락 시 400Error을 전달한다")
void missRestaurantNameTest() throws Exception {
// given
RestaurantSaveRequestDto request = RestaurantSaveRequestDto.builder()
.name("")
.minOrderPrice(4900)
.deliveryFee(5900)
.build();
String json = objectMapper.writeValueAsString(request);
//expected
mockMvc.perform(post("/api/v1/restaurants")
.contentType(APPLICATION_JSON)
.content(json)
)
.andExpect(status().isBadRequest())
.andDo(MockMvcResultHandlers.print());
}
}
Validation 코드 작성하고 실행 하자마자 에러 발생!
@WebMvcTest 어노테이션을 이용하여 음식점을 등록하는 Controller의 메소드만들 테스트 하려했다.
출력된 Error Stack trace (간략하게 작성하겠다;;)
java.lang.IllegalStateException: Failed to load ApplicationContext
...
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException : Error creating bean with name 'orderControllerV1'
...
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException : No qualifying bean of type '~~.service.OrderService'
...
처음에 에러 메시지를 보고 들었던 생각은... 내가 현재 사용하지 않는 Controller의 Bean을 찾지 못해 발생하는 에러인 것은 알겠는데... 아니 왜 내가 테스트 하지 않는 Controller의 Bean을 왜 찾는지 이해되지 않았다.