首页 > 解决方案 > Spring:在 Unittest 中回滚事务

问题描述

我有一个复杂的服务方法,它从数据库加载大量数据。因为它只读取和验证数据我想确保

  1. JPA (Hibernate) 不会浪费时间检查大型持久性上下文的更改。
  2. 不会将数据的意外更改写入数据库。

因此,在我的服务即将结束时,我有这个代码

TransactionAspectSupport.currentTransactionStatus().setRollbackOnly()

我的单元测试对所有数据库访问都有模拟,因此事务不是问题。(我也有集成测试@SpringBootTest和完整的 trx 支持。)不幸的是,回滚语句在纯单元测试中失败。

有没有一种简单的方法可以让回滚语句在单元测试的情况下什么也不做?

标签: javaspringspring-boottransactionsspring-transactions

解决方案


现在我只写了一个很容易模拟的小组件:

@Component
public class RollBacker {

    public void setRollBackOnly() {
        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
    }

}

毕竟,单例方法TransactionAspectSupport使得单元测试在这里变得困难。恕我直言TransactionAspectSupport,应该是春豆。


推荐阅读