@TargetSE(valueSE=TYPESE) @RetentionSE(valueSE=RUNTIMESE) @DocumentedSE @InheritedSE @RepeatableSE(valueSE=TestPropertySources.class) public @interface TestPropertySource
@TestPropertySource は、統合テスト用に ApplicationContext の Environment の PropertySources のセットに追加されるプロパティファイルの locations() およびインライン化された properties() を構成するために使用されるクラスレベルのアノテーションです。 テストプロパティソースは、オペレーティングシステムの環境または Java システムプロパティからロードされたものよりも優先度が高く、アプリケーションによって宣言的に @PropertySource を介して、またはプログラムによって(たとえば、ApplicationContextInitializer またはその他の手段を介して)追加されたプロパティソースも同じです。テストプロパティソースを使用して、システムおよびアプリケーションプロパティソースで定義されたプロパティを選択的にオーバーライドできます。さらに、インライン化された properties() は、リソース locations() からロードされたプロパティよりも優先されます。ただし、@DynamicPropertySource を介して登録されたプロパティは、@TestPropertySource を介してロードされたプロパティよりも優先されることに注意してください。
@TestPropertySource が空のアノテーションとして宣言されている場合(つまり、locations() または properties() の明示的な値がない場合)、アノテーションを宣言したクラスに関連するデフォルトのプロパティファイルを検出しようとします。例: アノテーション付きテストクラスが com.example.MyTest の場合、対応するデフォルトプロパティファイルは "classpath:com/example/MyTest.properties" です。デフォルトを検出できない場合、IllegalStateExceptionSE がスローされます。
@TestPropertySource は、設定されたコンテキストローダーがそれを尊重する場合に有効になります。AbstractGenericContextLoader または AbstractGenericWebContextLoader のサブクラスであるすべての SmartContextLoader は、@TestPropertySource の自動サポートを提供します。これには、Spring TestContext フレームワークによって提供されるすべての SmartContextLoader が含まれます。
@TestPropertySource は @ContextConfiguration と組み合わせて使用されます。@TestPropertySource は繰り返し可能なSEアノテーションとして使用できます。locations および inheritLocations 属性は属性解決プロセス中にあいまいさを引き起こす可能性があるため、このアノテーションと @ContextConfiguration を合成アノテーションで組み合わせる場合は注意が必要です。@NestedTestConfiguration を参照してください。ContextConfiguration, DynamicPropertySource, Environment, PropertySource, PropertySource| 修飾子と型 | オプションの要素と説明 |
|---|---|
boolean | inheritLocations スーパークラスからプロパティソース locations() をテストするかどうかを継承する必要があります。 |
boolean | inheritProperties スーパークラスからインラインテスト properties() を継承するかどうか。 |
StringSE[] | locationsEnvironment の PropertySources のセットにロードされるプロパティファイルのリソースの場所。 |
StringSE[] | propertiesApplicationContext がテスト用にロードされる前に Spring Environment に追加する必要があるキーと値のペアの形式のインラインプロパティ。 |
StringSE[] | valuelocations() のエイリアス。 |
@AliasFor(value="locations") public abstract StringSE[] value
locations() のエイリアス。 この属性は、locations() と組み合わせて使用することはできませんが、locations() の代わりに使用することができます。
locations()@AliasFor(value="value") public abstract StringSE[] locations
Environment の PropertySources のセットにロードされるプロパティファイルのリソースの場所。各場所は、宣言された順序で、自身のプロパティソースとして、包含 Environment に追加されます。 従来のプロパティファイル形式と XML ベースのプロパティファイル形式の両方がサポートされています。— たとえば、"classpath:/com/example/test.properties" または "file:/path/to/file.xml"。
各パスは Spring Resource として解釈されます。プレーンパス(たとえば、"test.properties")は、テストクラスが定義されているパッケージに関連するクラスパスリソースとして扱われます。スラッシュで始まるパスは、絶対クラスパスリソースとして扱われます(例: "/org/example/test.xml")。URL を参照するパス(たとえば、接頭辞 classpath:、file:、http: など)は、指定されたリソースプロトコルを使用してロードされます。リソースの場所のワイルドカード(**/*.properties など)は許可されていません。各場所は、正確に 1 つの .properties または .xml リソースに評価される必要があります。パス内のプロパティプレースホルダー(つまり、${...})は Environment に対して解決されます。
デフォルトの検出については、クラスレベルの Javadoc を参照してください。
リソースの場所から読み込まれたプロパティは、インライン properties() よりも優先順位が低くなります。
この属性は、value() と組み合わせて使用することはできませんが、value() の代わりに使用することができます。
public abstract boolean inheritLocations
locations() をテストするかどうかを継承する必要があります。 デフォルト値は true です。これは、テストクラスがスーパークラスによって定義されたプロパティソースの場所を継承することを意味します。具体的には、テストクラスのプロパティソースの場所は、スーパークラスによって定義されたプロパティソースの場所のリストに追加されます。サブクラスには、テストプロパティソースの場所のリストを拡張するオプションがあります。
inheritLocations が false に設定されている場合、テストクラスのプロパティソースの場所は、スーパークラスによって定義されたプロパティソースの場所をシャドウし、効果的に置き換えます。
次の例では、BaseTest の ApplicationContext は、"base.properties" ファイルのみをテストプロパティソースとして使用してロードされます。対照的に、ExtendedTest の ApplicationContext は、"base.properties" および "extended.properties" ファイルをテストプロパティソースの場所として使用してロードされます。
@TestPropertySource("base.properties")
@ContextConfiguration
public class BaseTest {
// ...
}
@TestPropertySource("extended.properties")
@ContextConfiguration
public class ExtendedTest extends BaseTest {
// ...
}@TestPropertySource が繰り返し可能なSEアノテーションとして使用される場合、次の特別な規則が適用されます。
@TestPropertySource アノテーションとは対照的に、テストクラス階層の特定のレベル(つまり、テストクラスに直接存在するかメタ存在する)のすべての @TestPropertySource アノテーションは、ローカルアノテーションと見なされます。@TestPropertySource アノテーションは、inheritLocations フラグに同じ値を宣言する必要があります。inheritLocations フラグは、ローカル @TestPropertySource アノテーション間では考慮されません。具体的には、1 つのローカルアノテーションのプロパティソースの場所が、以前のローカルアノテーションで定義されたプロパティソースの場所のリストに追加されます。これにより、ローカルアノテーションがテストプロパティソースの場所のリストを継承し、個々のプロパティをオーバーライドする可能性があります。locations()public abstract StringSE[] properties
ApplicationContext がテスト用にロードされる前に Spring Environment に追加する必要があるキーと値のペアの形式のインラインプロパティ。すべてのキーと値のペアは、最高の優先順位を持つ単一のテスト PropertySource として、包含 Environment に追加されます。キーと値のペアでサポートされている構文は、JavaプロパティファイルSEのエントリに対して定義されている構文と同じです。
"key=value""key:value""key value" この属性を介して宣言されたプロパティは、リソース locations() からロードされたプロパティよりも優先順位が高くなります。
この属性は、value() または locations() と組み合わせて使用できます。
public abstract boolean inheritProperties
properties() を継承するかどうか。 デフォルト値は true です。これは、テストクラスがスーパークラスによって定義されたインラインプロパティを継承することを意味します。具体的には、テストクラスのインラインプロパティは、スーパークラスによって定義されたインラインプロパティのリストに追加されます。サブクラスには、インライン化されたテストプロパティのリストを拡張するオプションがあります。
inheritProperties が false に設定されている場合、テストクラスのインラインプロパティは、スーパークラスによって定義されたインラインプロパティをシャドウし、効果的に置き換えます。
次の例では、BaseTest の ApplicationContext は、インライン化された key1 プロパティのみを使用してロードされます。対照的に、ExtendedTest の ApplicationContext は、インラインの key1 および key2 プロパティを使用してロードされます。
@TestPropertySource(properties = "key1 = value1")
@ContextConfiguration
public class BaseTest {
// ...
}
@TestPropertySource(properties = "key2 = value2")
@ContextConfiguration
public class ExtendedTest extends BaseTest {
// ...
}@TestPropertySource が繰り返し可能なSEアノテーションとして使用される場合、次の特別な規則が適用されます。
@TestPropertySource アノテーションとは対照的に、テストクラス階層の特定のレベル(つまり、テストクラスに直接存在するかメタ存在する)のすべての @TestPropertySource アノテーションは、ローカルアノテーションと見なされます。@TestPropertySource アノテーションは、inheritProperties フラグに同じ値を宣言する必要があります。inheritProperties フラグは、ローカル @TestPropertySource アノテーション間では考慮されません。具体的には、1 つのローカルアノテーションのインラインプロパティが、以前のローカルアノテーションで定義されたインラインプロパティのリストに追加されます。これにより、ローカルアノテーションがインラインプロパティのリストを継承し、個々のプロパティをオーバーライドする可能性があります。properties()