Spring 的 TestNG 回滚事务不起作用

Posted

技术标签:

【中文标题】Spring 的 TestNG 回滚事务不起作用【英文标题】:Spring's TestNG rollback transaction not working 【发布时间】:2018-12-19 06:49:34 【问题描述】:

在我的 general question 之后,我在使用 spring jdbcTemplate 时遇到了一个特定问题,我想在每次执行以下 DAO 方法后回滚特定的测试方法。

添加@Transactional@Rollback(true)未能回滚插入

还在之前/之后获得连接并回滚它不起作用

@Test
@Transactional
@Rollback(true)
public void testInsertUser() 
    Assert.assertEquals(userDAO.insertUser(new User(55616103, true, true, false)), true);

我应该如何使用 TestNG 框架回滚单元测试?大多数answers使用Junit的@RunWith(SpringJUnit4ClassRunner.class)

我使用 TestNG 自动连接 jdbcTemplate 失败:

@Autowired
private JdbcTemplate jdbcTemplate;

但成功使用 SpringJUnit4ClassRunner 并包含配置类包括 jdbcTemplate/DataStource

TestNG 是否可以选择使用 Spring 上下文执行?

【问题讨论】:

【参考方案1】:

解决方案是将AbstractTestNGSpringContextTests替换为AbstractTransactionalTestNGSpringContextTests

参考:Spring + TestNG not transactionally rollback

【讨论】:

以上是关于Spring 的 TestNG 回滚事务不起作用的主要内容,如果未能解决你的问题,请参考以下文章

@Transactional注解事务不回滚不起作用无效

Spring启动集成测试回滚不起作用

Spring @Transactional注解不回滚不起作用无效

Spring Batch tasklet中的嵌套事务不起作用

Spring Transaction Aware 缓存不起作用

事务回滚在 JUnit5 的 @Nested 类的测试用例中不起作用