2011-03-15 16 views
0

私はSpringのjunitランナーを使用しており、そのテストの前後にトランザクションを開始し、ロールバックするトランザクション機能を使用しています。スプリング、トランザクション、単体テスト - クラスレベルでトランザクションを設定する方法

しかし、私はいくつかの重いDBの初期化でテストクラスを持っています、そして、私はそれぞれのテスト(メソッド)をトランザクションスコープ内で実行したい、つまりテストの始めにトランザクションを開始し、完了しました。

答えて

4

クラス内のすべてのテストメソッドを1回のトランザクションで実行すると、多くの問題が発生することにご注意ください。基本的には、クリーンなデータベースを使用することに依存することができなくなります。これは、他のテスト方法が途中で修正するためです。また、テストメソッドの順序が指定されていないので、それに依存することもできません(データベースが正確に何を保持しているかはわかりません)。本質的には、すべてのテストトランザクションサポートを放棄しています。唯一の保証は、テストケース全体を実行した後、データベースがクリーンであることです(他のテストケースには影響しません)。

あなたの不満の終わり。私は、春がそのような振る舞いをすぐにサポートしているとは思わない(部分的に上記の理由により)。しかし、あなたが密接にTransactionalTestExecutionListenerを見て、それは春のテストでトランザクションサポートを担当しています。

@Override 
public void beforeTestMethod(TestContext testContext) throws Exception { 
    //... 
    startNewTransaction(testContext, txContext); 
} 

と:

@Override 
public void afterTestMethod(TestContext testContext) throws Exception { 
    //... 
    endTransaction(testContext, txContext); 
    //... 
} 

beforeTestClassafterTestClass実装されていないがある、でも、よく見る...あなたは春のリファレンスドキュメントの章9.3.5にこのすべてを配線する方法を詳細に説明しています。ヒント:独自のリスナーを作成し、TransactionalTestExecutionListenerの代わりに使用してください。

関連する問題