私はSpringのjunitランナーを使用しており、そのテストの前後にトランザクションを開始し、ロールバックするトランザクション機能を使用しています。スプリング、トランザクション、単体テスト - クラスレベルでトランザクションを設定する方法
しかし、私はいくつかの重いDBの初期化でテストクラスを持っています、そして、私はそれぞれのテスト(メソッド)をトランザクションスコープ内で実行したい、つまりテストの始めにトランザクションを開始し、完了しました。
私はSpringのjunitランナーを使用しており、そのテストの前後にトランザクションを開始し、ロールバックするトランザクション機能を使用しています。スプリング、トランザクション、単体テスト - クラスレベルでトランザクションを設定する方法
しかし、私はいくつかの重いDBの初期化でテストクラスを持っています、そして、私はそれぞれのテスト(メソッド)をトランザクションスコープ内で実行したい、つまりテストの始めにトランザクションを開始し、完了しました。
クラス内のすべてのテストメソッドを1回のトランザクションで実行すると、多くの問題が発生することにご注意ください。基本的には、クリーンなデータベースを使用することに依存することができなくなります。これは、他のテスト方法が途中で修正するためです。また、テストメソッドの順序が指定されていないので、それに依存することもできません(データベースが正確に何を保持しているかはわかりません)。本質的には、すべてのテストトランザクションサポートを放棄しています。唯一の保証は、テストケース全体を実行した後、データベースがクリーンであることです(他のテストケースには影響しません)。
あなたの不満の終わり。私は、春がそのような振る舞いをすぐにサポートしているとは思わない(部分的に上記の理由により)。しかし、あなたが密接にTransactionalTestExecutionListenerを見て、それは春のテストでトランザクションサポートを担当しています。
@Override
public void beforeTestMethod(TestContext testContext) throws Exception {
//...
startNewTransaction(testContext, txContext);
}
と:
@Override
public void afterTestMethod(TestContext testContext) throws Exception {
//...
endTransaction(testContext, txContext);
//...
}
今beforeTestClass
とafterTestClass
実装されていないがある、でも、よく見る...あなたは春のリファレンスドキュメントの章9.3.5にこのすべてを配線する方法を詳細に説明しています。ヒント:独自のリスナーを作成し、TransactionalTestExecutionListener
の代わりに使用してください。