반응형
필자의 사이드프로젝트에 Spring Security가 적용되어 있었다.
Spring Security의 구조를 리팩토링 한 후에 테스트 케이스를 돌려보았는데 @WebMvcTest 가 붙어있는 테스트케이스들이 깨지기 시작하였다.
SecurityConfig 를 생성하지 못한다는 에러를 뿜었다.
이번 리팩토링에서 변화한 것은 필드가 추가되었고 그에따른 생성자가 추가되었다는 것이다.
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
private final LoginAuthenticationProvider loginAuthenticationProvider;
private final JWTAuthenticationProvider jwtAuthenticationProvider;
private final LoginAuthHandler loginAuthHandler;
public SecurityConfig(LoginAuthenticationProvider loginAuthenticationProvider, JWTAuthenticationProvider jwtAuthenticationProvider, LoginAuthHandler loginAuthHandler) {
this.loginAuthenticationProvider = loginAuthenticationProvider;
this.jwtAuthenticationProvider = jwtAuthenticationProvider;
this.loginAuthHandler = loginAuthHandler;
}
}
이것 때문이라고 의심을 하게 되었고 검색을 해보았다.
그러던 중 WebMvcTest 어노테이션은 @Component, @Service, @Repository 을 스캔하지 않는다는 것을 알게되었다.
필자가 추가한 세개의 필드는 Component 어노테이션이 붙어있었기 때문에 스캔을 하지 못해서 빈을 정상적으로 생성하지 못했던 것이다.
해결 방법은 간단하다.
아래와 같이 @MockBean을 추가하면 된다.
public class ControllerTest {
@MockBean
LoginAuthenticationProvider loginAuthenticationProvider;
@MockBean
JWTAuthenticationProvider jwtAuthenticationProvider;
@MockBean
LoginAuthHandler loginAuthHandler;
}
반응형
'개발 > Spring' 카테고리의 다른 글
[Querydsl] SemanticException: right-hand operand of a binary operator was null (0) | 2021.04.12 |
---|---|
[Spring] @TestConfiguration (0) | 2021.04.09 |
[Spring Security] Login 이 성공했을 때 후처리를 어떻게 할 수 있을까? (1) | 2021.04.03 |
[Spring Security] Spring Security Login 테스트코드 만들기 (0) | 2021.03.26 |
[Spring Security] Cannot pass a null GrantedAuthority collection (0) | 2021.03.26 |
댓글