스프링

테스트 시 @Value 사용

메오백 2024. 11. 4.

스프링에서 @Value 는 properties 파일에서 속성값을 읽어오는데 쓰인다. 테스트 시에는 @Value를 어떻게 사용할까?

 

public class ValueTest {

    @Value("${member.password}")
    private String password;

    @Test
    void valueTest() {
        assertThat(password).isNotNull();
        assertThat(password).isEqualTo("babo123!");
    }
}

위 테스트는 password값이 null로 실패한다. 

 

@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = TestConfig.class)
public class ValueTest {

    @Value("${member.password}")
    private String password;

    @Test
    void valueTest() {
        assertThat(password).isNotNull();
        assertThat(password).isEqualTo("babo123!");
    }
}

@Configuration
@PropertySource("classpath:application.properties")
public class TestConfig {

}

테스트 컨텍스트에 스프링 컨텍스트를 붙여주자 성공했다. @Value 사용에 스프링 컨텍스트가 필요한 이유가 뭘까?

 

@Value의 작동방식

@Value는 DI의 일종으로 DI 시점에 발생한다. DI는 스프링 컨테이너가 자동으로 의존관계 주입을 해 주는 것이다. 따라서 스프링 컨텍스트가 필요한 것이다. 

더보기

자세한 내용은 아래 글을 참고하자

https://mangkyu.tistory.com/150

 

@SpringBootTest등을 사용한다면 @Value사용에 문제가 없겠지만, 다른 테스트 환경에서는 이 점을 참고하자. 

 

 

 

 

댓글