spring - 每次测试后撤消@Sql

标签 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 和测试本身所做的操作,以便一个测试不会影响其他测试?

最佳答案

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

@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(){
    ...
}

关于spring - 每次测试后撤消@Sql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50427885/

相关文章:

jquery - Spring MVC jQuery 远程验证

java - 当运行程序调用 '@Before' 方法时,Spring 不会 Autowiring 字段

java - 如何为 MockMvcRequestBuilders 构建获取查询字符串?

java - 无法在 Spring Boot 中为每个测试方法初始化数据库

java - Resttemplate 等效/curl -T 或 --upload-file 选项的映射

java - Spring 安全 : saved SecurityContext got a Null authentication

java - 使用 apache cxf 的 Spring 启动不使用 logback.xml

java - Hibernate 不自动创建表

spring - 如何在 kubernetes 中连接 headless Mongo Service

mysql - HIbernate 批量插入或更新在 Spring Boot 中不起作用