クラス TransactionalTestExecutionListener
- 実装されているすべてのインターフェース:
Ordered, TestExecutionListener
@Transactional アノテーションを尊重することにより、テスト管理トランザクション内でのテストの実行をサポートする TestExecutionListener。テスト管理されたトランザクション
テスト管理トランザクションは、このリスナーを介して宣言的に管理されるトランザクション、または TestTransaction を介してプログラムによって管理されるトランザクションです。このようなトランザクションは、Spring 管理のトランザクション(テスト用にロードされた ApplicationContext 内の Spring によって直接管理されるトランザクション)やアプリケーション管理のトランザクション(テストによって呼び出されるアプリケーションコード内でプログラムによって管理されるトランザクション)と混同しないでください。通常、Spring 管理およびアプリケーション管理のトランザクションは、テスト管理のトランザクションに参加します。ただし、Spring 管理またはアプリケーション管理のトランザクションが REQUIRED または SUPPORTS 以外の伝播型で構成されている場合は注意が必要です。
トランザクションの有効化と無効化
テストメソッドに @Transactional アノテーションを付けると、トランザクション内でテストが実行され、デフォルトでは、テストの完了後に自動的にロールバックされます。テストクラスに @Transactional アノテーションが付けられている場合、そのクラス階層またはネストされたクラス階層内の各テストメソッドはトランザクション内で実行されます。(クラスまたはメソッドレベルで) @Transactional アノテーションが付けられていないテストメソッドは、トランザクション内で実行されません。さらに、@Transactional でアノテーションが付けられているが、propagation 型が NOT_SUPPORTED または NEVER に設定されているテストは、トランザクション内で実行されません。
宣言的なロールバックとコミットの動作
デフォルトでは、テストトランザクションはテストの完了後に自動的にロールバックされます。ただし、トランザクションレベルのコミットおよびロールバックの動作は、クラスレベルおよびメソッドレベルで @Commit および @Rollback アノテーションを使用して宣言的に構成できます。
プログラムによるトランザクション管理
Spring Framework 4.1 以降、TestTransaction の静的メソッドを介してプログラムでテスト管理トランザクションと対話することが可能です。TestTransaction は、テストメソッド内、メソッドの前、メソッドの後で使用できます。
トランザクション外でコードを実行する
トランザクションテストを実行する場合、トランザクションの外部で特定のセットアップコードまたは破棄コードを実行できると便利な場合があります。TransactionalTestExecutionListener は、@BeforeTransaction または @AfterTransaction でアノテーションが付けられたメソッドのそのようなサポートを提供します。Spring Framework 4.3 の時点で、@BeforeTransaction および @AfterTransaction は、Java 8 ベースのインターフェースのデフォルトメソッドでも宣言できます。
トランザクションマネージャーの構成
TransactionalTestExecutionListener は、テストの Spring ApplicationContext に PlatformTransactionManager Bean が定義されていることを期待します。テストの ApplicationContext 内に PlatformTransactionManager のインスタンスが複数ある場合は、修飾子を @Transactional で宣言できます (たとえば、@Transactional("myTxMgr") または @Transactional(transactionManager = "myTxMgr"))。または、TransactionManagementConfigurer を @Configuration クラスで実装できます。テストの ApplicationContext でトランザクションマネージャーを検索するために使用されるアルゴリズムの詳細については、TestContextTransactionUtils.retrieveTransactionManager(TestContext, String) を参照してください。
@Transactional 属性のサポート
| 属性 | テスト管理されたトランザクションでサポート |
|---|---|
value および transactionManager | はい |
propagation | NOT_SUPPORTED と NEVER のみがサポートされています |
isolation | いいえ |
timeout | いいえ |
readOnly | いいえ |
rollbackFor および rollbackForClassName | いいえ: 代わりに TestTransaction.flagForRollback() を使用してください |
noRollbackFor および noRollbackForClassName | いいえ: 代わりに TestTransaction.flagForCommit() を使用してください |
- 導入:
- 2.5
- 作成者:
- Sam Brannen, Juergen Hoeller
- 関連事項:
フィールドのサマリー
フィールドインターフェース Ordered から継承されたフィールド
HIGHEST_PRECEDENCE, LOWEST_PRECEDENCEコンストラクターの概要
コンストラクター方法の概要
修飾子と型メソッド説明voidafterTestMethod(TestContext testContext) 指定されたテストコンテキストに対してトランザクションが現在アクティブである場合、このメソッドはトランザクションを終了し、@AfterTransactionメソッドを実行します。voidbeforeTestMethod(TestContext testContext) 指定されたテストコンテキストのテストメソッドがトランザクション内で実行されるように構成されている場合、このメソッドは@BeforeTransactionメソッドを実行し、新しいトランザクションを開始します。final intgetOrder()4000 を返します。これにより、TransactionalTestExecutionListenerがCommonCachesTestExecutionListenerの後、SqlScriptsTestExecutionListenerの前に配置されることが保証されます。protected @Nullable PlatformTransactionManagergetTransactionManager(TestContext testContext) 指定されたテストコンテキストに使用するトランザクションマネージャーを取得します。protected @Nullable PlatformTransactionManagergetTransactionManager(TestContext testContext, @Nullable StringSE qualifier) protected final booleanisDefaultRollback(TestContext testContext) 提供されたテストコンテキストに対して、デフォルトでトランザクションをロールバックするかどうかを決定します。protected final booleanisRollback(TestContext testContext) デフォルトのロールバックフラグと、@Rollbackアノテーションを介したメソッドレベルのオーバーライドの可能性を考慮して、提供されたテストコンテキストのトランザクションをロールバックするかどうかを決定します。protected voidrunAfterTransactionMethods(TestContext testContext) 指定されたテストコンテキストに対してすべての@AfterTransactionメソッドを実行します。protected voidrunBeforeTransactionMethods(TestContext testContext) 指定されたテストコンテキストに対してすべての@BeforeTransactionメソッドを実行します。
フィールドの詳細
ORDER
attributeSource
コンストラクターの詳細
TransactionalTestExecutionListener
public TransactionalTestExecutionListener()
メソッドの詳細
getOrder
public final int getOrder()4000 を返します。これにより、TransactionalTestExecutionListenerがCommonCachesTestExecutionListenerの後、SqlScriptsTestExecutionListenerの前に配置されることが保証されます。- 次で指定:
- インターフェース
OrderedのgetOrder - オーバーライド:
- クラス
AbstractTestExecutionListenerのgetOrder - 戻り値:
- オーダー額
- 関連事項:
beforeTestMethod
指定されたテストコンテキストのテストメソッドがトランザクション内で実行されるように構成されている場合、このメソッドは@BeforeTransactionメソッドを実行し、新しいトランザクションを開始します。@BeforeTransactionメソッドが失敗した場合、残りの@BeforeTransactionメソッドは呼び出されず、トランザクションは開始されないことに注意してください。- 次で指定:
- インターフェース
TestExecutionListenerのbeforeTestMethod - オーバーライド:
- クラス
AbstractTestExecutionListenerのbeforeTestMethod - パラメーター:
testContext- テストメソッドが実行されるテストコンテキスト。非null- 例外:
ExceptionSE- 例外の伝播を許可します- 関連事項:
afterTestMethod
指定されたテストコンテキストに対してトランザクションが現在アクティブである場合、このメソッドはトランザクションを終了し、@AfterTransactionメソッドを実行します。@AfterTransactionメソッドは、トランザクションの終了中にエラーが発生した場合でも呼び出されることが保証されています。- 次で指定:
- インターフェース
TestExecutionListenerのafterTestMethod - オーバーライド:
- クラス
AbstractTestExecutionListenerのafterTestMethod - パラメーター:
testContext- テストメソッドが実行されたテストコンテキスト ; 決してnull- 例外:
ExceptionSE- 例外の伝播を許可します- 関連事項:
runBeforeTransactionMethods
指定されたテストコンテキストに対してすべての@BeforeTransactionメソッドを実行します。ただし、メソッドの 1 つが失敗した場合、キャッチされた例外はラップされたRuntimeExceptionSE で再スローされ、残りのメソッドには実行の機会が与えられません。- パラメーター:
testContext- 現在のテストコンテキスト- 例外:
ExceptionSE
runAfterTransactionMethods
指定されたテストコンテキストに対してすべての@AfterTransactionメソッドを実行します。いずれかのメソッドが失敗した場合、キャッチされた例外はエラーとして記録され、残りのメソッドには実行の機会が与えられます。すべてのメソッドが実行された後、最初にキャッチされた例外があれば、それが再スローされます。- パラメーター:
testContext- 現在のテストコンテキスト- 例外:
ExceptionSE
getTransactionManager
protected @Nullable PlatformTransactionManager getTransactionManager(TestContext testContext, @Nullable StringSE qualifier) 提供されたテストコンテキストとqualifierに使用するトランザクションマネージャーを取得します。指定された
qualifierがnullまたは空の場合、getTransactionManager(TestContext)に委譲します。- パラメーター:
testContext- トランザクションマネージャーを取得するテストコンテキストqualifier- 複数の Bean 一致から選択するための修飾子。nullまたは空の場合があります- 戻り値:
- 使用するトランザクションマネージャー。見つからない場合は
null - 例外:
BeansException- トランザクションマネージャーの取得中にエラーが発生した場合- 関連事項:
getTransactionManager
指定されたテストコンテキストに使用するトランザクションマネージャーを取得します。デフォルトの実装は、単に
TestContextTransactionUtils.retrieveTransactionManager(TestContext, String)に委譲するだけです。- パラメーター:
testContext- トランザクションマネージャーを取得するテストコンテキスト- 戻り値:
- 使用するトランザクションマネージャー。見つからない場合は
null - 例外:
BeansException- 明示的に名前が付けられたトランザクションマネージャーの取得中にエラーが発生した場合IllegalStateExceptionSE- ApplicationContext に複数の TransactionManagementConfigurer が存在する場合- 関連事項:
isDefaultRollback
- パラメーター:
testContext- デフォルトのロールバックフラグを取得するテストコンテキスト- 戻り値:
- 指定されたテストコンテキストのデフォルトロールバックフラグ
- 例外:
ExceptionSE- デフォルトのロールバックフラグの決定中にエラーが発生した場合
isRollback
デフォルトのロールバックフラグと、@Rollbackアノテーションを介したメソッドレベルのオーバーライドの可能性を考慮して、提供されたテストコンテキストのトランザクションをロールバックするかどうかを決定します。- パラメーター:
testContext- ロールバックフラグを取得するテストコンテキスト- 戻り値:
- 指定されたテストコンテキストのロールバックフラグ
- 例外:
ExceptionSE- ロールバックフラグの決定中にエラーが発生した場合