@TargetSE(valueSE={TYPESE,METHODSE}) @RetentionSE(valueSE=RUNTIMESE) @DocumentedSE @InheritedSE @RepeatableSE(valueSE=SqlGroup.class) public @interface Sql
@Sql は、テストクラスまたはテストメソッドにアノテーションを付けて、SQL scripts() および statements() が統合テスト中に特定のデータベースに対して実行されるように構成するために使用されます。メソッドレベルの宣言は、クラスレベルの宣言をオーバーライドします。
スクリプトの実行は、デフォルトで有効になっている SqlScriptsTestExecutionListener によって実行されます。
このアノテーションおよび @SqlConfig によって提供される構成オプションは、ScriptUtils および ResourceDatabasePopulator によってサポートされるものと同等ですが、<jdbc:initialize-database/> XML 名前空間要素によって提供されるもののスーパーセットです。詳細については、このアノテーションおよび @SqlConfig の個々の属性の javadoc を参照してください。
Java 8 以降、@Sql は繰り返し可能なSEアノテーションとして使用できます。それ以外の場合、@SqlGroup は、@Sql の複数のインスタンスを宣言するための明示的なコンテナーとして使用できます。
このアノテーションをメタアノテーションとして使用して、属性をオーバーライドしたカスタム合成アノテーションを作成できます。
SqlConfig, SqlGroup, SqlScriptsTestExecutionListener, Transactional, TransactionalTestExecutionListener, ResourceDatabasePopulator, ScriptUtils| 修飾子と型 | オプションの要素と説明 |
|---|---|
SqlConfig | config この @Sql アノテーション内で宣言された SQL スクリプトおよびステートメントのローカル構成。 |
Sql.ExecutionPhase | executionPhaseSQL スクリプトおよびステートメントを実行するタイミング。 |
StringSE[] | scripts 実行する SQL スクリプトへのパス。 |
StringSE[] | statements 実行するインライン SQL ステートメント。 |
StringSE[] | valuescripts() のエイリアス。 |
@AliasFor(value="scripts") public abstract StringSE[] value
scripts(), statements()@AliasFor(value="value") public abstract StringSE[] scripts
この属性は value() と組み合わせて使用することはできませんが、value() の代わりに使用できます。同様に、この属性は statements() とともに、または statements() の代わりに使用できます。
各パスは Spring Resource として解釈されます。プレーンパス("schema.sql" など)は、テストクラスが定義されているパッケージに関連するクラスパスリソースとして扱われます。スラッシュで始まるパスは、絶対クラスパスリソースとして扱われます(例: "/org/example/schema.sql")。URL を参照するパス(たとえば、classpath:、file:、http: などのプレフィックスが付いたパス)は、指定されたリソースプロトコルを使用してロードされます。
SQL スクリプトまたは statements() が指定されていない場合、このアノテーションが宣言されている場所に応じて、デフォルトのスクリプトを検出しようとします。デフォルトを検出できない場合、IllegalStateExceptionSE がスローされます。
com.example.MyTest の場合、対応するデフォルトスクリプトは "classpath:com/example/MyTest.sql" です。testMethod() で、クラス com.example.MyTest で定義されている場合、対応するデフォルトスクリプトは "classpath:com/example/MyTest.testMethod.sql" です。value(), statements()public abstract Sql.ExecutionPhase executionPhase
デフォルトは BEFORE_TEST_METHOD です。
public abstract SqlConfig config
@Sql アノテーション内で宣言された SQL スクリプトおよびステートメントのローカル構成。 ローカルとグローバルの構成、継承、オーバーライドなどの説明については、SqlConfig のクラスレベルの javadoc を参照してください。
デフォルトは空の @SqlConfig インスタンスです。