Spring JPA集成测试数据自动回滚,是哪部分代码触发了回滚操作?
问题解答
你编写的测试业务代码中没有单独触发回滚的代码行,自动回滚是类上标注的@DataJpaTest注解的默认配置带来的能力。
具体逻辑说明:
- Spring Boot提供的
@DataJpaTest注解默认开启了测试事务自动回滚特性:测试方法运行结束后,Spring测试框架会自动触发事务回滚操作,不需要额外编写回滚代码,这也是你数据库对应表始终没有留存测试数据的原因。 - 至于
notificationTerm.getId()每次执行测试都自增1的现象,是PostgreSQL自增序列的特性导致的:当你调用entityManager.persist(notificationTerm)执行持久化操作时,已经从表对应的自增序列中获取到了新的ID值,序列的取值操作不跟随事务回滚,已经被消耗的序列值不会被退回,所以后续测试再取ID时就会在上次取值的基础上自增。
内容的提问来源于stack exchange,提问作者Hleb Shypula
相关产品推荐
相关产品推荐

