アノテーションインターフェース DynamicPropertySource
Environment
の PropertySources
のセットに追加する必要がある統合テストのメソッドレベルのアノテーション。 このアノテーションとそのサポートインフラストラクチャは、もともと Testcontainers ベースのテストのプロパティを Spring 統合テストに簡単に公開できるように設計されていました。ただし、この機能は、ライフサイクルがテストの ApplicationContext
の外部で維持される任意の形式の外部リソースでも使用できます。
@DynamicPropertySource
アノテーションが付けられたメソッドは、static
である必要があり、Environment
の PropertySources
のセットに名前と値のペアを追加するために使用される単一の DynamicPropertyRegistry
引数を持っている必要があります。値は動的であり、プロパティが解決されたときにのみ呼び出される Supplier
SE を介して提供されます。通常、以下の例のように、メソッド参照を使用して値を指定します。
Spring Framework 5.3.2 のように、@DynamicPropertySource
でアノテーションメソッドから動的プロパティがスーパークラスとインターフェースから継承に類似するテストクラスを囲むから継承されます。詳細については、@NestedTestConfiguration
を参照してください。
注意 : 基本クラスで @DynamicPropertySource
を使用し、動的プロパティがサブクラス間で変更されるためにサブクラスでのテストが失敗することがわかった場合、各サブクラスが正しい動的プロパティを持つ独自の ApplicationContext
を取得するように、基本クラスに @DirtiesContext
のアノテーションを付ける必要があります。
優先順位
動的プロパティは、@TestPropertySource
から読み込まれたプロパティ、オペレーティングシステムの環境、Java システムプロパティ、アプリケーションによって宣言的に @PropertySource
を使用して、またはプログラムで追加されたプロパティソースよりも優先されます。動的プロパティを使用して、@TestPropertySource
、システムプロパティソース、アプリケーションプロパティソースを介してロードされたプロパティを選択的にオーバーライドできます。
サンプル
@SpringJUnitConfig(...) @Testcontainers class ExampleIntegrationTests { @Container static RedisContainer redis = new RedisContainer(); // ... @DynamicPropertySource static void redisProperties(DynamicPropertyRegistry registry) { registry.add("redis.host", redis::getHost); registry.add("redis.port", redis::getMappedPort); } }
- 導入:
- 5.2.5
- 作成者:
- Phillip Webb, Sam Brannen
- 関連事項: