2013-06-25 16 views
9

私は@Beforeと@Transactional

@RunWith(SpringJUnit4ClassRunner.class) 
@TransactionConfiguration(defaultRollback = true, transactionManager = "transactionManager") 

    @Before 
    @Transactional 
    public void mySetup() { 
     // insert some records in db 
    } 

    @After 
    @Transactional 
    public void myTeardown() { 
     // delete some records 
    } 

    @Test 
    @Transactional 
    public void testMy() { 
     // do stuff 
    } 

を持っているが私の質問は:MySetupを、testMyとmyTeardownはすべて同じトランザクション内で実行されますか?彼らはすべきだと思われますが、私は彼らがお互いに踏み込んでいることを示唆するかもしれないいくつかの奇妙なエラーを得ています。

答えて

14

はい、3つのメソッドはすべて同じトランザクション内で実行されます。参照ドキュメントセクションTestContext Framework/Transaction managementを参照:

トランザクション

を実行している(例えばするJUnitの@Afterで注釈法など)メソッド後(例えばするJUnitの@Beforeで注釈メソッドなど)の方法および任意前

任意

mySetup()およびmyTeardown()の注釈は、現在の個々のテスト方法によってトランザクション性が決定されるため、冗長であるか、誤解を招く恐れがあるかもしれません。 (トランザクションを完了/開始を担当する)TransactionalTestExecutionListenerbeforeTestMethod()afterTestMethod()コールバックは、それぞれ、JUnitのの@AfterメソッドのJUnitの@Beforeの前と後に実行されているので、

これ

です。