public class TransactionalTestExecutionListener extends AbstractTestExecutionListener
@Transactional
アノテーションを尊重することにより、テスト管理トランザクション内でのテストの実行をサポートする TestExecutionListener
。 テスト管理トランザクションは、このリスナーを介して宣言的に管理されるトランザクション、または TestTransaction
を介してプログラムによって管理されるトランザクションです。このようなトランザクションは、Spring 管理のトランザクション(テスト用にロードされた ApplicationContext
内の Spring によって直接管理されるトランザクション)やアプリケーション管理のトランザクション(テストによって呼び出されるアプリケーションコード内でプログラムによって管理されるトランザクション)と混同しないでください。通常、Spring 管理およびアプリケーション管理のトランザクションは、テスト管理のトランザクションに参加します。ただし、Spring 管理またはアプリケーション管理のトランザクションが REQUIRED
または SUPPORTS
以外の伝播型で構成されている場合は注意が必要です。
@Transactional
を使用してテストメソッドにアノテーションを付けると、テストはトランザクション内で実行され、デフォルトでは、テストの補完後に自動的にロールバックされます。テストクラスに @Transactional
アノテーションが付けられている場合、そのクラス階層内の各テストメソッドはトランザクション内で実行されます。(クラスまたはメソッドレベルで) @Transactional
アノテーションが付けられていないテストメソッドは、トランザクション内で実行されません。さらに、@Transactional
アノテーションが付けられているが、propagation
型が NOT_SUPPORTED
に設定されているテストは、トランザクション内で実行されません。
デフォルトでは、テストトランザクションはテストの補完後に自動的にロールバックされます。ただし、トランザクションレベルのコミットおよびロールバックの動作は、クラスレベルおよびメソッドレベルで @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 のみがサポートされます |
isolation | いいえ |
timeout | いいえ |
readOnly | いいえ |
rollbackFor および rollbackForClassName | いいえ: 代わりに TestTransaction.flagForRollback() を使用してください |
noRollbackFor および noRollbackForClassName | いいえ: 代わりに TestTransaction.flagForCommit() を使用してください |
TransactionManagementConfigurer
, Transactional
, Commit
, Rollback
, BeforeTransaction
, AfterTransaction
, TestTransaction
修飾子と型 | フィールドと説明 |
---|---|
protected TransactionAttributeSource | attributeSource |
HIGHEST_PRECEDENCE, LOWEST_PRECEDENCE
コンストラクターと説明 |
---|
TransactionalTestExecutionListener() |
修飾子と型 | メソッドと説明 |
---|---|
void | afterTestMethod(TestContext testContext) 指定されたテストコンテキストに対してトランザクションが現在アクティブである場合、このメソッドはトランザクションを終了し、 @AfterTransaction メソッドを実行します。 |
void | beforeTestMethod(TestContext testContext) 指定されたテストコンテキストのテストメソッドがトランザクション内で実行されるように構成されている場合、このメソッドは @BeforeTransaction メソッドを実行し、新しいトランザクションを開始します。 |
int | getOrder() 4000 を返します。 |
protected PlatformTransactionManager | getTransactionManager(TestContext testContext) 指定されたテストコンテキストに使用するトランザクションマネージャーを取得します。 |
protected PlatformTransactionManager | getTransactionManager(TestContext testContext, StringSE qualifier) |
protected boolean | isDefaultRollback(TestContext testContext) 指定されたテストコンテキストに対してデフォルトでトランザクションをロールバックするかどうかを決定します。 |
protected boolean | isRollback(TestContext testContext) |
protected void | runAfterTransactionMethods(TestContext testContext) 指定されたテストコンテキストに対してすべての @AfterTransaction メソッドを実行します。 |
protected void | runBeforeTransactionMethods(TestContext testContext) 指定されたテストコンテキストに対してすべての @BeforeTransaction メソッドを実行します。 |
afterTestClass, afterTestExecution, beforeTestClass, beforeTestExecution, prepareTestInstance
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSE
protected final TransactionAttributeSource attributeSource
public final int getOrder()
4000
を返します。Ordered
の getOrder
AbstractTestExecutionListener
の getOrder
Ordered.HIGHEST_PRECEDENCE
, Ordered.LOWEST_PRECEDENCE
public void beforeTestMethod(TestContext testContext) throws ExceptionSE
@BeforeTransaction
メソッドを実行し、新しいトランザクションを開始します。@BeforeTransaction
メソッドが失敗した場合、残りの @BeforeTransaction
メソッドは呼び出されず、トランザクションは開始されないことに注意してください。
TestExecutionListener
の beforeTestMethod
AbstractTestExecutionListener
の beforeTestMethod
testContext
- テストメソッドが実行されるテストコンテキスト。非 null
ExceptionSE
- 例外の伝播を許可します @Transactional
, getTransactionManager(TestContext, String)
public void afterTestMethod(TestContext testContext) throws ExceptionSE
@AfterTransaction
メソッドを実行します。@AfterTransaction
メソッドは、トランザクションの終了中にエラーが発生した場合でも呼び出されることが保証されています。
TestExecutionListener
の afterTestMethod
AbstractTestExecutionListener
の afterTestMethod
testContext
- テストメソッドが実行されたテストコンテキスト ; 決して null
ExceptionSE
- 例外の伝播を許可します TestExecutionListener.beforeTestMethod(org.springframework.test.context.TestContext)
, TestExecutionListener.beforeTestExecution(org.springframework.test.context.TestContext)
, TestExecutionListener.afterTestExecution(org.springframework.test.context.TestContext)
protected void runBeforeTransactionMethods(TestContext testContext) throws ExceptionSE
@BeforeTransaction
メソッドを実行します。ただし、メソッドの 1 つが失敗した場合、キャッチされた例外はラップされた RuntimeException
SE で再スローされ、残りのメソッドには実行の機会が与えられません。testContext
- 現在のテストコンテキスト ExceptionSE
protected void runAfterTransactionMethods(TestContext testContext) throws ExceptionSE
@AfterTransaction
メソッドを実行します。いずれかのメソッドが失敗した場合、キャッチされた例外はエラーとして記録され、残りのメソッドには実行の機会が与えられます。すべてのメソッドが実行された後、最初にキャッチされた例外があれば、それが再スローされます。testContext
- 現在のテストコンテキスト ExceptionSE
@Nullable protected PlatformTransactionManager getTransactionManager(TestContext testContext, @Nullable StringSE qualifier)
qualifier
に使用するトランザクションマネージャーを取得します。 指定された qualifier
が null
または空の場合、getTransactionManager(TestContext)
に委譲します。
testContext
- トランザクションマネージャーを取得するテストコンテキスト qualifier
- 複数の Bean 一致から選択するための修飾子。null
または空の場合があります null
BeansException
- トランザクションマネージャーの取得中にエラーが発生した場合 getTransactionManager(TestContext)
@Nullable protected PlatformTransactionManager getTransactionManager(TestContext testContext)
デフォルトの実装は、単に TestContextTransactionUtils.retrieveTransactionManager(org.springframework.test.context.TestContext, java.lang.String)
に委譲するだけです。
testContext
- トランザクションマネージャーを取得するテストコンテキスト null
BeansException
- 明示的に名前が付けられたトランザクションマネージャーの取得中にエラーが発生した場合 IllegalStateExceptionSE
- ApplicationContext に複数の TransactionManagementConfigurer が存在する場合 getTransactionManager(TestContext, String)
protected final boolean isDefaultRollback(TestContext testContext) throws ExceptionSE
testContext
- デフォルトのロールバックフラグを取得するテストコンテキスト ExceptionSE
- デフォルトのロールバックフラグの決定中にエラーが発生した場合 protected final boolean isRollback(TestContext testContext) throws ExceptionSE
@Rollback
アノテーションによるメソッドレベルのオーバーライドを考慮して、指定されたテストコンテキストのトランザクションをロールバックするかどうかを決定します。testContext
- ロールバックフラグを取得するテストコンテキスト ExceptionSE
- ロールバックフラグの決定中にエラーが発生した場合