1. 개요

Spring은 코드 테스트에 도움이 되는 많은 기능을 제공합니다. 테스트 사례에서 원하는 시나리오를 설정하기 위해 특정 구성 속성을 사용해야 하는 경우가 있습니다.

이러한 상황 에서 @TestPropertySource 어노테이션 을 사용할 수 있습니다 . 이 도구를 사용하면 프로젝트에서 사용되는 다른 소스보다 우선 순위가 높은 구성 소스를 정의할 수 있습니다.

따라서 이 짧은 사용방법(예제)에서는 이 어노테이션을 사용하는 예를 볼 것입니다. 또한 기본 동작과 지원하는 주요 특성을 분석합니다.

Spring Boot에서 테스트하는 방법에 대해 자세히 알아보려면 'Testing in Spring Boot' 사용방법(예제)를 살펴보는 것이 좋습니다 .

2. 의존성

프로젝트에 필요한 모든 라이브러리를 포함하는 가장 쉬운 방법은  pom.xml 파일 에 spring-boot-starter-test  아티팩트를 추가하는 것입니다.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
    <version>2.7.2</version>
</dependency>

Maven Central을 확인하여  스타터 라이브러리 의 최신 버전을 사용하고 있는지 확인할 수 있습니다 .

3. @TestPropertySource 사용 방법

@Value  Spring 어노테이션 을 사용하여 속성 값을 주입하여 속성 값을 사용한다고 상상해 봅시다  .

@Component
public class ClassUsingProperty {
    
    @Value("${baeldung.testpropertysource.one}")
    private String propertyOne;
    
    public String retrievePropertyOne() {
        return propertyOne;
    }
}

그런 다음 @TestPropertySource  클래스 수준 어노테이션을 사용하여 새 구성 소스를 정의하고 해당 속성의 값을 재정의합니다.

@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");
    }
}

일반적으로 이 테스트 어노테이션을 사용할 때마다 시나리오에 대한 ApplicationContext 를 로드하고 구성하기 위해  @ContextConfiguration  어노테이션도 포함합니다.

기본적으로 @TestPropertySource 어노테이션은 어노테이션 을 선언한 클래스에 상대적인 속성 파일 을 로드하려고 시도합니다 .

이 경우 예를 들어 테스트 클래스가  com.baeldung.testpropertysource 패키지에 있으면 클래스 경로에 com/baeldung/testpropertysource/DefaultTest.properties  파일이 필요합니다 .

그런 다음 리소스 폴더에 추가해 보겠습니다.

# DefaultTest.properties
baeldung.testpropertysource.one=default-value

또한 기본 구성 파일 위치를 변경하거나 우선 순위가 더 높은 추가 속성을 추가할 수 있습니다.

@TestPropertySource(locations = "/other-location.properties",
  properties = "baeldung.testpropertysource.one=other-property-value")

마지막으로 슈퍼클래스에서 위치속성을 상속할지 여부를 지정할 수 있습니다 . 따라서 기본적으로 true 인 inheritLocations 및  inheritProperties  속성 을 토글할 수 있습니다  .

4. 결론

이 간단한 예제를 통해  @TestPropertySource Spring 어노테이션을 효과적으로 사용하는 방법을 배웠습니다.

Github 리포지토리 에서 다양한 시나리오에 대한 예를 찾을 수 있습니다 .

Junit footer banner