@TargetSE(valueSE={TYPESE,METHODSE}) @RetentionSE(valueSE=RUNTIMESE) @DocumentedSE @InheritedSE @RepeatableSE(valueSE=SqlGroup.class) public @interface Sql
@Sql
は、テストクラスまたはテストメソッドにアノテーションを付けて、SQL scripts()
および statements()
が統合テスト中に特定のデータベースに対して実行されるように構成するために使用されます。 メソッドレベルの宣言はデフォルトでクラスレベルの宣言をオーバーライドしますが、この動作は @SqlMergeMode
を介して構成できます。
スクリプトの実行は、デフォルトで有効になっている SqlScriptsTestExecutionListener
によって実行されます。
このアノテーションおよび @SqlConfig
によって提供される構成オプションは、ScriptUtils
および ResourceDatabasePopulator
によってサポートされるものと同等ですが、<jdbc:initialize-database/>
XML 名前空間要素によって提供されるもののスーパーセットです。詳細については、このアノテーションおよび @SqlConfig
の個々の属性の javadoc を参照してください。
Java 8 以降、@Sql
は繰り返し可能なSEアノテーションとして使用できます。それ以外の場合、@SqlGroup
は、@Sql
の複数のインスタンスを宣言するための明示的なコンテナーとして使用できます。
このアノテーションをメタアノテーションとして使用して、属性をオーバーライドしたカスタム合成アノテーションを作成できます。
SqlConfig
, SqlMergeMode
, SqlGroup
, SqlScriptsTestExecutionListener
, Transactional
, TransactionalTestExecutionListener
, ResourceDatabasePopulator
, ScriptUtils
修飾子と型 | オプションの要素と説明 |
---|---|
SqlConfig | config この @Sql アノテーション内で宣言された SQL スクリプトおよびステートメントのローカル構成。 |
Sql.ExecutionPhase | executionPhase SQL スクリプトおよびステートメントを実行するタイミング。 |
StringSE[] | scripts 実行する SQL スクリプトへのパス。 |
StringSE[] | statements 実行するインライン SQL ステートメント。 |
StringSE[] | value scripts() のエイリアス。 |
@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()
が指定されていない場合、このアノテーションが宣言されている場所に応じて、デフォルトのスクリプトを検出しようとします。デフォルトを検出できない場合、IllegalStateException
SE がスローされます。
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
インスタンスです。