クラス TransactionalTestExecutionListener

java.lang.ObjectSE
org.springframework.test.context.support.AbstractTestExecutionListener
org.springframework.test.context.transaction.TransactionalTestExecutionListener
実装されたすべてのインターフェース:
OrderedTestExecutionListener

public class TransactionalTestExecutionListener extends AbstractTestExecutionListener
Spring の @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 はい
propagationNOT_SUPPORTEDNEVER のみがサポートされています
isolation いいえ
timeout いいえ
readOnly いいえ
rollbackFor および rollbackForClassName いいえ: 代わりに TestTransaction.flagForRollback() を使用してください
noRollbackFor および noRollbackForClassName いいえ: 代わりに TestTransaction.flagForCommit() を使用してください
導入:
2.5
作成者:
Sam Brannen, Juergen Hoeller
関連事項: