インターフェース TestExecutionListener

すべての既知のサブインターフェース:
AotTestExecutionListener
すべての既知の実装クラス:
AbstractDirtiesContextTestExecutionListenerAbstractTestExecutionListenerApplicationEventsTestExecutionListenerBeanOverrideTestExecutionListenerCommonCachesTestExecutionListenerDependencyInjectionTestExecutionListenerDirtiesContextBeforeModesTestExecutionListenerDirtiesContextTestExecutionListenerEventPublishingTestExecutionListenerMockitoResetTestExecutionListenerServletTestExecutionListenerSqlScriptsTestExecutionListenerTransactionalTestExecutionListener

public interface TestExecutionListener
TestExecutionListener は、リスナーが登録されている TestContextManager によって発行されたテスト実行イベントに反応するためのリスナー API を定義します。

すべてのテストフレームワークが、この API で定義されているすべてのライフサイクルコールバックをサポートしているわけではないことに注意してください。例: SpringMethodRule を使用する場合、beforeTestExecution および afterTestExecution コールバックは JUnit 4 と組み合わせてサポートされません。

このインターフェースは、すべてのメソッドに対して空の default 実装を提供します。具体的な実装では、目前のタスクに適したメソッドのみをオーバーライドすることを選択できます。

具体的な実装では、public 引数なしコンストラクターを提供する必要があります。これにより、ツールと構成メカニズムによってリスナーを透過的にインスタンス化できます。

実装では、オプションで、Ordered インターフェースまたは @Order アノテーションを介して、デフォルトリスナーのチェーン間での順序を宣言する必要があります。詳細については、TestContextBootstrapper.getTestExecutionListeners() を参照してください。

リスナーの折り返し動作

TestContextManager は、ライフサイクルコールバックを実装する複数の登録済みリスナー ( beforeTestClassafterTestClassbeforeTestMethodafterTestMethodbeforeTestExecutionafterTestExecution など) のラップ動作を保証します。つまり、Listener1 が Listener2 より前に登録されている 2 つのリスナー Listener1 と Listener2 がある場合、Listener1 によって実装されたすべての before コールバックは、Listener2 によって実装されたすべての before コールバックより前に呼び出されることが保証されます。同様に、同じ 2 つのリスナーが同じ順序で登録されている場合、Listener1 によって実装されたすべての after コールバックは、Listener2 によって実装されたすべての after コールバックのに呼び出されることが保証されます。Listener1 は Listener2 をラップすると言われています。

具体的な例として、TransactionalTestExecutionListenerSqlScriptsTestExecutionListener の関連を考えてみましょう。SqlScriptsTestExecutionListener は TransactionalTestExecutionListener の後に登録されるため、SQL スクリプトは TransactionalTestExecutionListener によって管理されるトランザクション内で実行されます。

TestExecutionListener 実装の登録

TestExecutionListener は、@TestExecutionListeners アノテーションを使用して、テストクラス、そのサブクラス、そのネストされたクラスに対して明示的に登録できます。明示的な登録は、限定的なテストシナリオで使用されるカスタムリスナーに適しています。ただし、テストスイート全体でカスタムリスナーを使用する必要がある場合は、面倒になる可能性があります。この課題は、SpringFactoriesLoader メカニズムによるデフォルトの TestExecutionListener 実装の自動検出をサポートすることで解決されています。特に、デフォルトの TestExecutionListener 実装は、META-INF/spring.factories プロパティファイルの org.springframework.test.context.TestExecutionListener キーに登録できます。

Spring は、次の実装を提供します。これらはそれぞれ Ordered を実装し、デフォルトで自動的に登録されます。

導入:
2.5
作成者:
Sam Brannen, Juergen Hoeller
関連事項: