テストの事前サポート

この章では、Spring TestContext フレームワーク を使用した統合テストに対する Spring の Ahead of Time (AOT) サポートについて説明します。

テストサポートは、Spring のコア AOT サポートを次の機能で拡張します。

  • TestContext フレームワークを使用して ApplicationContext をロードする、現在のプロジェクト内のすべての統合テストのビルド時の検出。

    • 現在のプロジェクトに登録されている JUnit プラットフォーム TestEngine を使用してテストが実行される限り、JUnit Jupiter および JUnit 4 に基づくテストクラスの明示的なサポートと、TestNG および Spring のコアテストアノテーションを使用するその他のテストフレームワークの暗黙的なサポートを提供します。

  • ビルド時の AOT 処理: 現在のプロジェクト内の各固有のテスト ApplicationContext は、AOT 処理のためにリフレッシュされます

  • ランタイム AOT サポート: AOT ランタイムモードで実行する場合、Spring 統合テストは、コンテキストキャッシュに透過的に参加する AOT 最適化 ApplicationContext を使用します。

デフォルトでは、すべてのテストが AOT モードで有効になります。ただし、@DisabledInAotMode のアノテーションを付けることで、AOT モードのテストクラス全体または個々のテストメソッドを選択的に無効にすることができます。JUnit Jupiter を使用する場合、Jupiter の @EnabledInNativeImage および @DisabledInNativeImage アノテーションを使用して、GraalVM ネイティブイメージ内のテストを選択的に有効または無効にすることができます。@DisabledInAotMode は、JUnit Jupiter の @DisabledInNativeImage アノテーションと同様に、GraalVM ネイティブイメージ内で実行する場合、アノテーション付きのテストクラスまたはテストメソッドも無効にすることに注意してください。

デフォルトでは、ビルド時の AOT 処理中にエラーが発生した場合、例外がスローされ、プロセス全体がただちに失敗します。

エラーが発生した後もビルド時の AOT 処理を続行したい場合は、failOnError モードを無効にすると、エラーが WARN レベルで、またはより詳細に DEBUG レベルで記録されます。

failOnError モードは、spring.test.aot.processing.failOnError という名前の JVM システムプロパティを false に設定することで、コマンドラインまたはビルドスクリプトから無効にできます。代わりに、SpringProperties メカニズムを介して同じプロパティを設定できます。

@ContextHierarchy アノテーションは AOT モードではサポートされません。

GraalVM ネイティブイメージ内で使用するテスト固有のランタイムヒントを提供するには、次のオプションがあります。

TestRuntimeHintsRegistrar API は、コア RuntimeHintsRegistrar API のコンパニオンとして機能します。特定のテストクラスに固有ではないテストサポートのグローバルヒントを登録する必要がある場合は、テスト固有の API よりも RuntimeHintsRegistrar の実装を優先してください。

カスタム ContextLoader を実装する場合、AOT ビルド時の処理と AOT ランタイム実行のサポートを提供するために、AotContextLoader (Javadoc) を実装する必要があります。ただし、Spring Framework および Spring Boot によって提供されるすべてのコンテキストローダーの実装は、すでに AotContextLoader を実装していることに注意してください。

カスタム TestExecutionListener を実装する場合、AOT 処理に参加するには AotTestExecutionListener (Javadoc) を実装する必要があります。例については、spring-test モジュールの SqlScriptsTestExecutionListener を参照してください。