每次测试后撤消@Sql

时间:2018-05-19 17:32:25

标签: spring spring-boot spring-test spring-boot-test

我有一些junit测试,我想在数据库中预先填充一些实际上对测试有意义的数据:

@RunWith(SpringRunner.class)
@SpringBootTest
@ActiveProfiles("test")
public class MyTest {


@Sql("test_insert.sql") 
@Test
public void testInsert(){
  ...performs some inserts...
}
@Sql("test_delete.sql") //makes inserts to the db so to delete them
@Test
public void testDelete(){
    ...
}

我注意到junit按逆序执行测试,这意味着我的testDelete将首先执行。

对于"重复的行约束"测试插入似乎失败了。这是因为test_delete.sql脚本实际上添加了该行。

是否可以回滚@Sql和测试本身所做的操作,以便一个测试不会影响其他测试?

1 个答案:

答案 0 :(得分:4)

您只需要在JUnit测试类之上添加@Transactional。这将在每次测试运行后恢复对数据库所做的所有更改。

@RunWith(SpringRunner.class)
@SpringBootTest
@ActiveProfiles("test")
@Transactional           //  <-- @Transactional added
public class MyTest {


@Sql("test_insert.sql") 
@Test
public void testInsert(){
  ...performs some inserts...
}
@Sql("test_delete.sql") //makes inserts to the db so to delete them
@Test
public void testDelete(){
    ...
}