アノテーションインターフェース 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
関連事項:
  • ネストされたクラスのサマリー

    ネストされたクラス
    修飾子と型
    クラス
    説明
    static enum
    SQL スクリプトを実行するタイミングを決定するフェーズの列挙。
  • オプション要素のサマリー

    オプション要素
    修飾子と型
    オプションの要素
    説明
    この @Sql アノテーション内で宣言された SQL スクリプトおよびステートメントのローカル構成。
    SQL スクリプトおよびステートメントを実行するタイミング。
    実行する SQL スクリプトへのパス。
    実行するインライン SQL ステートメント
    scripts() のエイリアス。
  • 要素の詳細

    • value

      @AliasFor("scripts") StringSE[] value
      scripts() のエイリアス。

      この属性は、scripts() と組み合わせて使用することはできませんが、scripts() の代わりに使用することができます。

      関連事項:
      デフォルト:
      {}
    • scripts

      @AliasFor("value") StringSE[] 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 executionPhase
      SQL スクリプトおよびステートメントを実行するタイミング。

      デフォルトは BEFORE_TEST_METHOD です。

      デフォルト:
      BEFORE_TEST_METHOD
    • config

      SqlConfig config
      この @Sql アノテーション内で宣言された SQL スクリプトおよびステートメントのローカル構成。

      ローカルとグローバルの構成、継承、オーバーライドなどの説明については、SqlConfig のクラスレベルの javadoc を参照してください。

      デフォルトは空の @SqlConfig インスタンスです。

      デフォルト:
      @org.springframework.test.context.jdbc.SqlConfig