アノテーションインターフェース Sql
@Sql
は、テストクラスまたはテストメソッドにアノテーションを付けて、SQL scripts()
および statements()
が統合テスト中に特定のデータベースに対して実行されるように構成するために使用されます。 メソッドレベルの宣言はデフォルトでクラスレベルの宣言をオーバーライドしますが、この動作は @SqlMergeMode
を介して構成できます。ただし、これは、BEFORE_TEST_CLASS
または AFTER_TEST_CLASS
実行フェーズ用に構成されたクラスレベルの宣言には適用されません。このような宣言はオーバーライドできず、メソッドレベルのスクリプトとステートメントに加えて、対応するスクリプトとステートメントがクラスごとに 1 回実行されます。
スクリプトの実行は、デフォルトで有効になっている SqlScriptsTestExecutionListener
によって実行されます。
このアノテーションおよび @SqlConfig
によって提供される構成オプションは、ScriptUtils
および ResourceDatabasePopulator
によってサポートされるものと同等ですが、<jdbc:initialize-database/>
XML 名前空間要素によって提供されるもののスーパーセットです。詳細については、このアノテーションおよび @SqlConfig
の個々の属性の javadoc を参照してください。
@Sql
は、繰り返し可能なSEアノテーションとして使用できます。それ以外の場合、@SqlGroup
は、@Sql
の複数のインスタンスを宣言するための明示的なコンテナーとして使用できます。
このアノテーションは、デフォルトでは、それを囲んでいるテストクラスから継承されます。詳細については、@NestedTestConfiguration
を参照してください。このアノテーションは、属性オーバーライドを持つカスタム合成アノテーションを作成するためのメタアノテーションとしても使用できます。
どの SQL スクリプトが実行されているかを確認したい場合は、org.springframework.test.context.jdbc
ログカテゴリを DEBUG
に設定します。どの SQL ステートメントが実行されているかを確認したい場合は、org.springframework.jdbc.datasource.init
ログカテゴリを DEBUG
に設定します。
このアノテーションを使用するには、spring-jdbc
モジュールと spring-tx
モジュール、およびそれらの推移的な依存関係がクラスパス上に存在する必要があります。
- 導入:
- 4.1
- 作成者:
- Sam Brannen, Andreas Ahlenstorf
- 関連事項:
要素の詳細
value
- デフォルト:
- {}
scripts
実行する SQL スクリプトへのパス。この属性は
value()
と組み合わせて使用することはできませんが、value()
の代わりに使用できます。同様に、この属性はstatements()
とともに、またはstatements()
の代わりに使用できます。Path Resource Semantics
各パスは Spring
Resource
として解釈されます。プレーンパス (例:"schema.sql"
) は、テストクラスが定義されているパッケージに相対的なクラスパスリソースとして扱われます。スラッシュで始まるパスは、絶対クラスパスリソースとして扱われます (例:"/org/example/schema.sql"
)。URL を参照するパス (例:classpath:
、file:
、http:
などで始まるパス) は、指定されたリソースプロトコルを使用して読み込まれます。Spring Framework 6.2 以降、パスにはプロパティプレースホルダー (
${...}
) が含まれる場合があります。これは、テストのApplicationContext
のEnvironment
に格納されているプロパティに置き換えられます。Default Script Detection
SQL スクリプトまたは
statements()
が指定されていない場合、このアノテーションが宣言されている場所に応じて、デフォルトのスクリプトを検出しようとします。デフォルトを検出できない場合、IllegalStateException
SE がスローされます。- クラスレベルの宣言 : アノテーション付きテストクラスが
com.example.MyTest
の場合、対応するデフォルトスクリプトは"classpath:com/example/MyTest.sql"
です。 - メソッドレベルの宣言 : アノテーション付きテストメソッドの名前が
testMethod()
で、クラスcom.example.MyTest
で定義されている場合、対応するデフォルトスクリプトは"classpath:com/example/MyTest.testMethod.sql"
です。
- デフォルト:
- {}
- クラスレベルの宣言 : アノテーション付きテストクラスが
statements
StringSE[] statements実行するインライン SQL ステートメント。この属性は、
scripts()
とともに、またはscripts()
の代わりに使用できます。Ordering
この属性を介して宣言されたステートメントは、リソース
scripts()
からロードされたステートメントの後に実行されます。スクリプトの前にインライン化されたステートメントを実行したい場合は、同じクラスまたはメソッドで@Sql
の複数のインスタンスを宣言するだけです。- 導入:
- 4.2
- 関連事項:
- デフォルト:
- {}
executionPhase
Sql.ExecutionPhase executionPhaseSQL スクリプトおよびステートメントを実行するタイミング。デフォルトは
BEFORE_TEST_METHOD
です。- デフォルト:
- BEFORE_TEST_METHOD
config
SqlConfig configこの@Sql
アノテーション内で宣言された SQL スクリプトおよびステートメントのローカル構成。ローカルとグローバルの構成、継承、オーバーライドなどの説明については、
SqlConfig
のクラスレベルの javadoc を参照してください。デフォルトは空の
@SqlConfig
インスタンスです。- デフォルト:
- @org.springframework.test.context.jdbc.SqlConfig