アノテーションインターフェース Sql
@Sql は、テストクラスまたはテストメソッドにアノテーションを付けて、SQL scripts() および statements() が統合テスト中に特定のデータベースに対して実行されるように構成するために使用されます。 メソッドレベルの宣言はデフォルトでクラスレベルの宣言をオーバーライドしますが、この動作は @SqlMergeMode を介して構成できます。
スクリプトの実行は、デフォルトで有効になっている SqlScriptsTestExecutionListener によって実行されます。
このアノテーションおよび @SqlConfig によって提供される構成オプションは、ScriptUtils および ResourceDatabasePopulator によってサポートされるものと同等ですが、<jdbc:initialize-database/> XML 名前空間要素によって提供されるもののスーパーセットです。詳細については、このアノテーションおよび @SqlConfig の個々の属性の javadoc を参照してください。
@Sql は、繰り返し可能なSEアノテーションとして使用できます。それ以外の場合、@SqlGroup は、@Sql の複数のインスタンスを宣言するための明示的なコンテナーとして使用できます。
このアノテーションをメタアノテーションとして使用して、属性をオーバーライドしたカスタム合成アノテーションを作成できます。
Spring Framework 5.3 以降、このアノテーションはデフォルトでそれを囲むテストクラスから継承されます。詳細については、@NestedTestConfiguration を参照してください。
要素の詳細
value
- デフォルト:
- {}
scripts
実行する SQL スクリプトへのパス。この属性は
value()と組み合わせて使用することはできませんが、value()の代わりに使用できます。同様に、この属性はstatements()とともに、またはstatements()の代わりに使用できます。Path Resource Semantics
各パスは Spring
Resourceとして解釈されます。プレーンパス("schema.sql"など)は、テストクラスが定義されているパッケージに関連するクラスパスリソースとして扱われます。スラッシュで始まるパスは、絶対クラスパスリソースとして扱われます(例:"/org/example/schema.sql")。URL を参照するパス(たとえば、classpath:、file:、http:などのプレフィックスが付いたパス)は、指定されたリソースプロトコルを使用してロードされます。Default Script Detection
SQL スクリプトまたは
statements()が指定されていない場合、このアノテーションが宣言されている場所に応じて、デフォルトのスクリプトを検出しようとします。デフォルトを検出できない場合、IllegalStateExceptionSE がスローされます。- クラスレベルの宣言 : アノテーション付きテストクラスが
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