クラス 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
は、テストのために PlatformTransactionManager
Bean が Spring ApplicationContext
で定義されることを期待しています。テストの ApplicationContext
内に PlatformTransactionManager
のインスタンスが複数ある場合、@Transactional
を介して修飾子を宣言できます(例: @Transactional("myTxMgr")
または @Transactional(transactionManager = "myTxMgr")
、または TransactionManagementConfigurer
は @Configuration
クラスによって実装できます。トランザクションのルックアップに使用されるアルゴリズムの詳細については TestContextTransactionUtils.retrieveTransactionManager(org.springframework.test.context.TestContext, java.lang.String)
を参照してください)テストの ApplicationContext
のマネージャー。
@Transactional
属性のサポート
属性 | テスト管理されたトランザクションでサポート |
---|---|
value および transactionManager | はい |
propagation | NOT_SUPPORTED と NEVER のみがサポートされています |
isolation | いいえ |
timeout | いいえ |
readOnly | いいえ |
rollbackFor および rollbackForClassName | いいえ: 代わりに TestTransaction.flagForRollback() を使用してください |
noRollbackFor および noRollbackForClassName | いいえ: 代わりに TestTransaction.flagForCommit() を使用してください |
- 導入:
- 2.5
- 作成者:
- Sam Brannen, Juergen Hoeller
- 関連事項:
フィールドサマリー
インターフェース org.springframework.core.Ordered から継承されたフィールド
HIGHEST_PRECEDENCE, LOWEST_PRECEDENCE
コンストラクターのサマリー
メソッドのサマリー
修飾子と型メソッド説明void
afterTestMethod
(TestContext testContext) 指定されたテストコンテキストに対してトランザクションが現在アクティブである場合、このメソッドはトランザクションを終了し、@AfterTransaction
メソッドを実行します。void
beforeTestMethod
(TestContext testContext) 指定されたテストコンテキストのテストメソッドがトランザクション内で実行されるように構成されている場合、このメソッドは@BeforeTransaction
メソッドを実行し、新しいトランザクションを開始します。final int
getOrder()
4000
を返します。protected PlatformTransactionManager
getTransactionManager
(TestContext testContext) 指定されたテストコンテキストに使用するトランザクションマネージャーを取得します。protected PlatformTransactionManager
getTransactionManager
(TestContext testContext, StringSE qualifier) protected final boolean
isDefaultRollback
(TestContext testContext) 提供されたテストコンテキストに対して、デフォルトでトランザクションをロールバックするかどうかを決定します。protected final boolean
isRollback
(TestContext testContext) デフォルトのロールバックフラグと、@Rollback
アノテーションを介したメソッドレベルのオーバーライドの可能性を考慮して、提供されたテストコンテキストのトランザクションをロールバックするかどうかを決定します。protected void
runAfterTransactionMethods
(TestContext testContext) 指定されたテストコンテキストに対してすべての@AfterTransaction
メソッドを実行します。protected void
runBeforeTransactionMethods
(TestContext testContext) 指定されたテストコンテキストに対してすべての@BeforeTransaction
メソッドを実行します。クラス org.springframework.test.context.support.AbstractTestExecutionListener から継承されたメソッド
afterTestClass, afterTestExecution, beforeTestClass, beforeTestExecution, prepareTestInstance
フィールドの詳細
attributeSource
コンストラクターの詳細
TransactionalTestExecutionListener
public TransactionalTestExecutionListener()
メソッドの詳細
getOrder
public final int getOrder()4000
を返します。- 次で指定:
- インターフェース
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 つが失敗した場合、キャッチされた例外はラップされたRuntimeException
SE で再スローされ、残りのメソッドには実行の機会が与えられません。- パラメーター:
testContext
- 現在のテストコンテキスト- 例外:
ExceptionSE
runAfterTransactionMethods
指定されたテストコンテキストに対してすべての@AfterTransaction
メソッドを実行します。いずれかのメソッドが失敗した場合、キャッチされた例外はエラーとして記録され、残りのメソッドには実行の機会が与えられます。すべてのメソッドが実行された後、最初にキャッチされた例外があれば、それが再スローされます。- パラメーター:
testContext
- 現在のテストコンテキスト- 例外:
ExceptionSE
getTransactionManager
@Nullable protected PlatformTransactionManager getTransactionManager(TestContext testContext, @Nullable StringSE qualifier) 提供されたテストコンテキストとqualifier
に使用するトランザクションマネージャーを取得します。指定された
qualifier
がnull
または空の場合、getTransactionManager(TestContext)
に委譲します。- パラメーター:
testContext
- トランザクションマネージャーを取得するテストコンテキストqualifier
- 複数の Bean 一致から選択するための修飾子。null
または空の場合があります- 戻り値:
- 使用するトランザクションマネージャー。見つからない場合は
null
- 例外:
BeansException
- トランザクションマネージャーの取得中にエラーが発生した場合- 関連事項:
getTransactionManager
指定されたテストコンテキストに使用するトランザクションマネージャーを取得します。デフォルトの実装は、単に
TestContextTransactionUtils.retrieveTransactionManager(org.springframework.test.context.TestContext, java.lang.String)
に委譲するだけです。- パラメーター:
testContext
- トランザクションマネージャーを取得するテストコンテキスト- 戻り値:
- 使用するトランザクションマネージャー。見つからない場合は
null
- 例外:
BeansException
- 明示的に名前が付けられたトランザクションマネージャーの取得中にエラーが発生した場合IllegalStateExceptionSE
- ApplicationContext に複数の TransactionManagementConfigurer が存在する場合- 関連事項:
isDefaultRollback
- パラメーター:
testContext
- デフォルトのロールバックフラグを取得するテストコンテキスト- 戻り値:
- 指定されたテストコンテキストのデフォルトロールバックフラグ
- 例外:
ExceptionSE
- デフォルトのロールバックフラグの決定中にエラーが発生した場合
isRollback
デフォルトのロールバックフラグと、@Rollback
アノテーションを介したメソッドレベルのオーバーライドの可能性を考慮して、提供されたテストコンテキストのトランザクションをロールバックするかどうかを決定します。- パラメーター:
testContext
- ロールバックフラグを取得するテストコンテキスト- 戻り値:
- 指定されたテストコンテキストのロールバックフラグ
- 例外:
ExceptionSE
- ロールバックフラグの決定中にエラーが発生した場合