1. 概要

Springには、コードのテストに役立つ多くの機能があります。 テストケースで目的のシナリオを設定するために、特定の構成プロパティを使用する必要がある場合があります。

これらの状況では、 @TestPropertySourceアノテーションを利用できます。 このツールを使用すると、プロジェクトで使用される他のソースよりも優先度の高い構成ソースを定義できます。

したがって、この短いチュートリアルでは、このアノテーションを使用する例を示します。 また、デフォルトの動作とサポートされる主な属性を分析します。

Spring Bootでのテストの詳細については、の「Spring Bootでのテスト」チュートリアルを参照することをお勧めします。

2. 依存関係

プロジェクトに必要なすべてのライブラリを含める最も簡単な方法は、spring-boot-starter-testアーティファクトをpom.xmlファイルに追加することです。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
    <version>2.6.1</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 をロードして構成するために、 @ContextConfigurationoneも含めます。

デフォルトでは、 @TestPropertySource アノテーションは、アノテーションを宣言したクラスに関連するプロパティファイルを読み込もうとします。

この場合、たとえば、テストクラスが com.baeldung.testpropertysource パッケージにある場合、ファイル com / baeldung / testpropertysource / DefaultTest.properties inクラスパス。

次に、それをリソースフォルダに追加しましょう。

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

さらに、デフォルトの構成ファイルの場所を変更したり、さらに優先度の高いプロパティを追加したりできます。

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

最後に、スーパークラスからlocationおよびproperties値を継承するかどうかを指定できます。 したがって、デフォルトでtrueであるinheritLocations属性とinheritProperties属性を切り替えることができます。

4. 結論

この簡単な例で、 @TestPropertySourceSpringアノテーションを効果的に使用する方法を学びました。

さまざまなシナリオの例は、Githubリポジトリにあります。