テスト実行イベント
EventPublishingTestExecutionListener は、カスタム TestExecutionListener を実装するための代替アプローチを提供します。テストの ApplicationContext のコンポーネントは、EventPublishingTestExecutionListener によって発行される次のイベントをリッスンできます。各イベントは、TestExecutionListener API のメソッドに対応しています。
BeforeTestClassEventPrepareTestInstanceEventBeforeTestMethodEventBeforeTestExecutionEventAfterTestExecutionEventAfterTestMethodEventAfterTestClassEvent
これらのイベントは、モック 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 を参照してください。