@Target(value=TYPE)
@Retention(value=RUNTIME)
@Documented
@Inherited
public @interface TestPropertySource
@TestPropertySource
は、統合テスト用に ApplicationContext
の Environment
の PropertySources
のセットに追加されるプロパティファイルの locations()
およびインライン化された properties()
を構成するために使用されるクラスレベルのアノテーションです。 テストプロパティソースは、オペレーティングシステムの環境または Java システムプロパティからロードされたものよりも優先度が高く、@PropertySource
またはプログラムによって(たとえば、ApplicationContextInitializer
または他の手段によって)宣言的にアプリケーションによって追加されたプロパティソースと同様です。テストプロパティソースを使用して、システムおよびアプリケーションプロパティソースで定義されたプロパティを選択的にオーバーライドできます。さらに、インライン化された properties()
は、リソース locations()
からロードされたプロパティよりも優先順位が高くなります。
@TestPropertySource
が空のアノテーションとして宣言されている場合(つまり、locations()
または properties()
の明示的な値がない場合)、アノテーションを宣言したクラスに関連するデフォルトのプロパティファイルを検出しようとします。例: アノテーション付きテストクラスが com.example.MyTest
の場合、対応するデフォルトプロパティファイルは "classpath:com/example/MyTest.properties"
です。デフォルトを検出できない場合、IllegalStateException
がスローされます。
@TestPropertySource
は、設定されたコンテキストローダーがそれを尊重する場合に有効になります。AbstractGenericContextLoader
または AbstractGenericWebContextLoader
のサブクラスであるすべての SmartContextLoader
は、@TestPropertySource
の自動サポートを提供します。これには、Spring TestContext フレームワークによって提供されるすべての SmartContextLoader
が含まれます。
@TestPropertySource
は @ContextConfiguration
と組み合わせて使用されます。locations
および inheritLocations
属性は属性解決プロセス中にあいまいさを引き起こす可能性があるため、このアノテーションと @ContextConfiguration
を合成アノテーションで組み合わせる場合は注意が必要です。ContextConfiguration
, Environment
, PropertySource
, PropertySource
修飾子と型 | オプションの要素と説明 |
---|---|
boolean | inheritLocations スーパークラスからプロパティソース locations() をテストするかどうかを継承する必要があります。 |
boolean | inheritProperties スーパークラスからインラインテスト properties() を継承するかどうか。 |
java.lang.String[] | locations Environment の PropertySources のセットにロードされるプロパティファイルのリソースの場所。 |
java.lang.String[] | properties ApplicationContext がテスト用にロードされる前に Spring Environment に追加する必要があるキーと値のペアの形式のインラインプロパティ。 |
java.lang.String[] | value locations() のエイリアス。 |
@AliasFor(value="locations") public abstract java.lang.String[] value
locations()
のエイリアス。 この属性は、locations()
と組み合わせて使用することはできませんが、locations()
の代わりに使用することができます。
locations()
@AliasFor(value="value") public abstract java.lang.String[] 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 { // ... }
locations()
public abstract java.lang.String[] properties
ApplicationContext
がテスト用にロードされる前に Spring Environment
に追加する必要があるキーと値のペアの形式のインラインプロパティ。すべてのキーと値のペアは、最高の優先順位を持つ単一のテスト PropertySource
として、包含 Environment
に追加されます。キーと値のペアでサポートされている構文は、Java プロパティファイルのエントリに定義されている構文と同じです。
"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 { // ... }
properties()