一尘不染

@Before和@Transactional

java

我有

@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是否都将在同一事务中运行?似乎他们应该这样做,但是我遇到了一个奇怪的错误,这可能表明他们正在互相踩踏。


阅读 436

收藏
2020-12-03

共1个答案

一尘不染

是的,这三种方法将在同一事务中运行。请参阅参考文档中的TestContext Framework
/事务管理
部分:

事务
执行任何before方法(例如,用JUnit的@Before注释的方法)和任何after方法(例如,用JUnit的@After注释的方法)

因此@TransactionalmySetup()和上的注释myTeardown()是多余的,甚至可能被误导,因为它们的事务性由当前正在执行的单个测试方法确定。

这是因为(负责启动/完成事务的)beforeTestMethod()和的afterTestMethod()回调分别在JUnit的方法TransactionalTestExecutionListener之前@Before和JUnit的@After方法之后执行。

2020-12-03