Trouble Shooting

[Spring Boot] Unsatisfied dependency expressed through field '..'; 단위 테스트시 Bean 생성에러

muggle-coder 2023. 8. 14. 14:43
728x90

 

 

테스트 중 아래 Bean을 생성하지못한다는 에러가 발생했다. 

@Autowired
PasswordEncoder passwordEncoder;

 

@DataJpaTest
class UsersRepositoryTest {

    private String name = "test";
    private String email = "testEmail";
    private String password = "testpwd";
    private Role role = Role.USER;
    private Provider provider = Provider.LOCAL;
    private String providerId = "testproviderid";

    @Autowired
    UserRepository userRepository;

    @Autowired
    PasswordEncoder passwordEncoder;

    @Test
    public void 유저_등록() {
        //given
        final User users = User.builder()
                        .name(name).email(email).password(passwordEncoder.encode(password)).build();

        //when
        final User result = userRepository.save(users);

        // then
        assertThat(result.getId()).isNotNull();
        assertThat(result.getName()).isEqualTo(name);

        // Verify that the password is encoded
        assertThat(password).isNotEqualTo(result.getPassword());
    }
    }

 

 

[해결방법]

단위테스트중에서 Bean들 중에서는 자동으로 설정되지 않는 경우가 있습니다.

@DataJpaTest는 JPA 관련 설정만을 포함하므로 따로 설정해주고나서 Import 해주어야합니다.

 

그게 싫다면, @SpringBootTest를 사용하면 Spring Boot 애플리케이션 컨텍스트가 통합되므로, 설정에 대한 직접적인 지정이 필요 없습니다. 하지만 주의할 점은 @SpringBootTest는 더 많은 리소스를 사용하므로 필요한 테스트 범위에 따라 적절한 선택이 필요합니다.

 

 

 

 

저는 일단 TestConfig 클래스를 작성하여 import 하려고 합니다.

 

@TestConfiguration
public class TestConfig {
    
    @Bean
    public PasswordEncoder passwordEncoder() {
        return PasswordEncoderFactories.createDelegatingPasswordEncoder();
    }

}

 

 

잘돼는 것을 확인했습니다.!