我有
@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是否都将在同一事务中运行?似乎他们应该这样做,但是我遇到了一个奇怪的错误,这可能表明他们正在互相踩踏。
最佳答案
是的,这三种方法将在同一事务中运行。请参阅引用文档中的TestContext Framework/Transaction management部分:
因此,关于@Transactional
和mySetup()
的myTeardown()
注释是多余的,或者甚至可能被认为具有误导性,因为它们的事务性由当前正在执行的单个测试方法确定。
这是因为beforeTestMethod()
(负责启动/完成事务)的afterTestMethod()
和TransactionalTestExecutionListener
回调分别在JUnit的@Before
和JUnit的@After
方法之后执行。