@Import @TestConfiguration

박용민·2024년 2월 20일
0

Unsatisfied dependency expressed through field 'passwordEncoder': No qualifying bean of type 'org.springframework.security.crypto.password.PasswordEncoder' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

오늘 테스트 코드를 작성하는 도중 해당 하는 에러를 만났다.
passwordEncoder? 분명 테스트 코드에서 @Autowired로 가져왔는데???🤔

class MemberTest {

    @Autowired
    private PasswordEncoder passwordEncoder;
    
    ...
}

WebSecurityConfig도 만들었는데? Bean을 가져오지 못 하였다.

// src/config/WebSecurityConfig.java
@Configuration
@EnableWebSecurity
@RequiredArgsConstructor
public class WebSecurityConfig {
    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}
    ...

계속해서 찾아보던 중 2가지를 알게 되었다.

@Import
Spring 테스트 컨텍스트에 필요한 추가 구성을 로드하기 위해 사용 특정 구성 클래스를 가져온다.

@TestConfiguration
Spring 테스트 컨텍스트에 대한 추가 구성을 제공하는 데 사용되는 어노테이션

먼저 test 폴더에 WebSecurityConfig.java를 다시 만들어준다.

// test/config/WebSecurityConfig.java
@TestConfiguration
@EnableWebSecurity
public class WebSecurityConfig {
    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

}
@Import(WebSecurityConfig.class)
class MemberTest {

    @Autowired
    private PasswordEncoder passwordEncoder;
  
    ...
}

DONE

0개의 댓글