21

私は持っている

@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 はすべて同じトランザクション内で実行されますか? そうすべきだと思われますが、お互いに足を踏み入れていることを示唆する奇妙なエラーが表示されます。

4

3 に答える 3

29

はい、3 つの方法はすべて同じトランザクション内で実行されます。リファレンス ドキュメントのセクションTestContext フレームワーク/トランザクション管理を参照してください。

before メソッド (JUnit の @Before でアノテーションが付けられたメソッドなど) および after メソッド (JUnit の @After でアノテーションが付けられたメソッドなど) はトランザクション内で実行されます。

したがって、 と の@Transactional注釈は冗長mySetup()myTeardown()あるか、誤解を招く可能性さえあります。それらのトランザクション性は、現在実行されている個々のテスト メソッドによって決定されるためです。

これは、 (トランザクションの開始/完了を担当する)beforeTestMethod()とのafterTestMethod()コールバックがそれぞれ JUnit のメソッドの前と JUnit のメソッドの後に実行されるためです。TransactionalTestExecutionListener@Before@After

于 2013-06-25T22:36:27.167 に答える