org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.itda.apiserver.jwt.TokenProvider' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
에러 로그를 보니 TokenProvider를 빈으로 등록하지 못하고 있다.
아래와 같이 @WebMvcTest를 이용하여 테스트하고 있다.
@WebMvcTest(UserController.class)
public class UserControllerTest {
@Autowired
private MockMvc mockMvc;
@MockBean
private UserService userService;
@Mock
private User user;
private ObjectMapper objectMapper = new ObjectMapper();
@Test
@DisplayName("회원 가입 기능 테스트")
void signUp() throws Exception {
...
}
}
공식문서를 보니 @WebMvcTest 를 사용하여 테스트할 때는 @Component는 스캔하지 않는다고 해서 해당 문제가 발생하는 듯 하다.
컴포넌트를 등록하기 위해서 @Import 어노테이션을 사용해서 등록할 클래스를 명시하면 된다.
@WebMvcTest(UserController.class)
@Import(value = {TokenProvider.class, TokenExtractor.class})
public class UserControllerTest {
...
}
RestTemplate은 스프링 버전 5부터 유지 모드로 변경되고 향후 deprecated 될 예정이라고 한다.
Spring에서도 WebClient 사용을 권고하고 있다.
비동기를 지원한다. → 비동기적으로 동작하는 것에 대해 더 학습이 필요하다. (참고하기: https://docs.spring.io/spring-framework/docs/current/reference/html/web-reactive.html )