@TestPropertySourceのクイックガイド

1.概要

Springは私たちのコードをテストするのを助けるために多くの機能を持っています。テストケースで目的のシナリオを設定するために特定の設定プロパティを使用する必要がある場合があります。

このような状況では、** @ TestPropertySource__アノテーションを利用できます。このツールを使用して、プロジェクトで使用されている他のどのソースよりも優先順位の高い設定ソースを定義できます。

したがって、この短いチュートリアルでは、この注釈を使用した例を見ていきます。また、デフォルトの動作とそれがサポートする主な属性についても分析します。

Spring Bootでのテストの詳細については、https://www.baeldung.com/spring-boot-testing[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.0.5.RELEASE</version>
</dependency>

3. @ TestPropertySource の使い方

@Value Springアノテーションを使用してインジェクトすることで、プロパティの値を使用していると想像してみてください。

@Component
public class ClassUsingProperty {

    @Value("${baeldung.testpropertysource.one}")
    private String propertyOne;

    public String retrievePropertyOne() {
        return propertyOne;
    }
}

それから __ @ TestPropertySource __class-levelアノテーションを使って新しい設定ソースを定義し、そのプロパティの値を上書きします

@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 __oneも含めます。

  • デフォルトでは、 @ TestPropertySource アノテーションはアノテーションを宣言したクラスに関連して properties ファイルをロードしようとします。

この場合、たとえば、テストクラスが 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")

最後に、スーパークラスから locations properties の値を継承するかどうかを指定できます。したがって、 inheritLocations __inheritProperties attributesを切り替えることができます。これらはデフォルトでは true__です。

4.まとめ

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

さまざまなシナリオの例はhttps://github.com/eugenp/tutorials/tree/master/testing-modules/spring-testing[Githubレポジトリ]にあります。