TestPropertySource
by Gunju Ko
@TestPropertySource
이 글은 Baeldung - Test Property Source를 번역한 글입니다. 원 글은 링크를 통해 확인하세요.
Overview
스프링은 테스트에 도움이 되는 많은 기능을 제공한다. 때로는 테스트케이스에서 특정 설정 정보를 사용해야만 할 때가 있다. 이럴때는 @TestPropertySource 애노테이션을 사용하면 된다. @TestPropertySource 애노테이션을 통해 다른 설정보다 더 높은 우선순위를 가지는 설정 sourace를 정의할 수 있다.
스프링부트에서 제공하는 테스트 관련 기능이 더 궁금하다면 Testing in Spring Boot 글을 참고하길 바란다.
Dependencies
spring-boot-starter-test에 대한 의존성을 추가하면, 스프링에서 제공하는 테스트 지원 기능을 사용할 수 있다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<version>2.0.5.RELEASE</version>
</dependency>
How to use @TestPropertySource
아래와 같이 @Value 애노테이션을 통해 프로퍼티의 값을 주입받는 빈이 있다.
@Component
public class ClassUsingProperty {
@Value("${baeldung.testpropertysource.one}")
private String propertyOne;
public String retrievePropertyOne() {
return propertyOne;
}
}
테스트 클래스에서는 @TestPropertySource 애노테이션을 사용해서 새로운 설정 Source를 정의하고 프로퍼티의 값을 오버라이딩 한다.
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = ClassUsingProperty.class)
@TestPropertySource
public class DefaultTest {
@Autowired
ClassUsingProperty classUsingProperty;
@Test
public void givenDefaultTPS_whenVariableRetrieved_thenDefaultFileReturned() {
String output = classUsingProperty.retrievePropertyOne();
assertThat(output).isEqualTo("default-value");
}
}
일반적으로 @TestPropertySource는 @ContextConfiguration과 함께 사용된다. @ContextConfiguration는 애플리케이션 컨텍스트를 설정하고 생성하기 위해서 사용된다. 기본적으로 @TestPropertySource 애노테이션은 해당 애노테이션이 추가된 클래스를 기준으로 properties 파일을 로드한다. 예를 들어 테스트 클래스가 “com.baeldung.testpropertysource” 패키지에 있다면, 클래스패스에 “com/baeldung/testpropertysource/DefaultTest.properties” 파일이 있어야한다.
locations 속성을 통해서 설정 파일의 위치를 변경할 수 있다. 또한 properties 속성을 통해 우선순위가 더 높은 속성을 추가할 수 있다.
@TestPropertySource(locations = "/other-location.properties",
properties = "baeldung.testpropertysource.one=other-property-value")
Conclusion
@TestProperties를 사용한 예제는 Github Repository에서 확인하실 수 있습니다.