アノテーションインターフェース DynamicPropertySource


@TargetSE(METHODSE) @RetentionSE(RUNTIMESE) @DocumentedSE public @interface DynamicPropertySource
動的な値を持つプロパティを Environment の PropertySources のセットに追加する必要がある統合テストのメソッドレベルのアノテーション。

このアノテーションとそのサポートインフラストラクチャは、もともと Testcontainers ベースのテストのプロパティを Spring 統合テストに簡単に公開できるように設計されていました。ただし、この機能は、ライフサイクルがテストの ApplicationContext の外部で維持される任意の形式の外部リソースでも使用できます。

@DynamicPropertySource アノテーションが付けられたメソッドは、static である必要があり、Environment の PropertySources のセットに名前と値のペアを追加するために使用される単一の DynamicPropertyRegistry 引数を持っている必要があります。値は動的であり、プロパティが解決されたときにのみ呼び出される SupplierSE を介して提供されます。通常、以下の例のように、メソッド参照を使用して値を指定します。

Spring Framework 5.3.2 のように、@DynamicPropertySource でアノテーションメソッドから動的プロパティがスーパークラスとインターフェースから継承に類似するテストクラスを囲むから継承ます。詳細については、@NestedTestConfiguration を参照してください。

注意 : 基本クラスで @DynamicPropertySource を使用し、動的プロパティがサブクラス間で変更されるためにサブクラスでのテストが失敗することがわかった場合、各サブクラスが正しい動的プロパティを持つ独自の ApplicationContext を取得するように、基本クラスに @DirtiesContext のアノテーションを付ける必要があります。

優先順位

動的プロパティは、@TestPropertySource から読み込まれたプロパティ、オペレーティングシステムの環境、Java システムプロパティ、アプリケーションによって宣言的に @PropertySource を使用して、またはプログラムで追加されたプロパティソースよりも優先されます。動的プロパティを使用して、@TestPropertySource、システムプロパティソース、アプリケーションプロパティソースを介してロードされたプロパティを選択的にオーバーライドできます。

サンプル

 @SpringJUnitConfig(...)
 @Testcontainers
 class ExampleIntegrationTests {

     @Container
     static GenericContainer redis =
         new GenericContainer("redis:5.0.3-alpine").withExposedPorts(6379);

     // ...

     @DynamicPropertySource
     static void redisProperties(DynamicPropertyRegistry registry) {
         registry.add("redis.host", redis::getHost);
         registry.add("redis.port", redis::getFirstMappedPort);
     }

 }
導入:
5.2.5
作成者:
Phillip Webb, Sam Brannen
関連事項: