JUnit:为测试类设置事务边界

时间:2012-08-14 08:03:30

标签: java spring junit junit4 spring-test

我希望在启动任何测试方法之前启动数据库事务,并在运行所有测试结束时回滚所有事务。

如何做事?我应该使用哪些注释?

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"/testApplicationContext.xml"})
public class MyTests{

   public void setUp(){
    //Insert temporary data to Database
   }

   @Test
   public void testOne(){
     //Do some DB transactions
   }

   @Test void testTwo(){
     //Do some more DB transactions
   }

   public void tearDown(){
   //Need to rollback all transactions
   }


}

3 个答案:

答案 0 :(得分:4)

在Spring中,只需在测试用例类中添加@Transactional注释:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"/testApplicationContext.xml"})
@Transactional   //CRUCIAL!
public class MyTests{

查看official documentation以获取非常详尽的详细信息,包括@TransactionConfiguration@BeforeTransaction@AfterTransaction和其他功能。

答案 1 :(得分:3)

在任何测试之前使用@Before启动方法,在每次测试之后使用@After启动方法。在方法或类上使用@Transactional spring注释来启动事务,使用@Rollback来回滚在事务中完成的所有操作。

@Before   
public void setUp(){
    //set up, before every test method
}

@Transactional
@Test
public void test(){
}

@Rollback
@After
public void tearDown(){
   //tear down after every test method
}

还有same issue solved in another way

答案 2 :(得分:1)

将注释@Before用于必须在每个测试方法之前运行的方法,并在每个测试方法之后运行@After

您可以将this article作为参考。