テスト実行イベント
Spring Framework 5.2 で導入された EventPublishingTestExecutionListener
は、カスタム TestExecutionListener
を実装するための代替アプローチを提供します。テストの ApplicationContext
のコンポーネントは、EventPublishingTestExecutionListener
によって発行された次のイベントをリッスンできます。各イベントは、TestExecutionListener
API のメソッドに対応しています。
BeforeTestClassEvent
PrepareTestInstanceEvent
BeforeTestMethodEvent
BeforeTestExecutionEvent
AfterTestExecutionEvent
AfterTestMethodEvent
AfterTestClassEvent
これらのイベントは、モック Bean のリセットやテスト実行のトレースなど、さまざまな理由で消費される場合があります。カスタム TestExecutionListener
を実装するのではなく、テスト実行イベントを消費する利点の 1 つは、テスト ApplicationContext
に登録された Spring Bean がテスト実行イベントを消費できること、およびそのような Bean が依存性注入および ApplicationContext
の他の機能から直接恩恵を受ける可能性があることです。対照的に、TestExecutionListener
は ApplicationContext
の Bean ではありません。
同様に、 |
テスト実行イベントをリッスンするために、Spring Bean は org.springframework.context.ApplicationListener
インターフェースの実装を選択できます。または、リスナーメソッドに @EventListener
アノテーションを付けて、上記の特定のイベント型の 1 つをリッスンするように構成できます(アノテーションベースのイベントリスナーを参照)。このアプローチの人気により、Spring は次の専用 @EventListener
アノテーションを提供して、テスト実行イベントリスナーの登録を簡素化します。これらのアノテーションは、org.springframework.test.context.event.annotation
パッケージにあります。
@BeforeTestClass
@PrepareTestInstance
@BeforeTestMethod
@BeforeTestExecution
@AfterTestExecution
@AfterTestMethod
@AfterTestClass
例外処理
デフォルトでは、テスト実行イベントリスナーがイベントの消費中に例外をスローすると、その例外は使用中の基礎となるテストフレームワーク(JUnit や TestNG など)に伝播します。例: BeforeTestMethodEvent
の消費により例外が発生した場合、対応するテストメソッドは例外の結果として失敗します。対照的に、非同期のテスト実行イベントリスナーが例外をスローする場合、例外は基礎となるテストフレームワークに伝播しません。非同期例外処理の詳細については、@EventListener
のクラスレベルの javadoc を参照してください。
非同期リスナー
特定のテスト実行イベントリスナーでイベントを非同期的に処理する場合は、Spring の通常の @Async
サポートを使用できます。詳細については、@EventListener
のクラスレベルの Javadoc を参照してください。