Spring: 单元测试中的回滚事务
Spring: Rollback transactin in Unittest
我有一个复杂的服务方法,它从数据库加载大量数据。因为它只读取和验证数据,所以我想确保
- JPA(Hibernate)不浪费时间检查大持久化
更改的上下文。
- 没有写入数据的意外更改
到数据库。
因此在我的服务即将结束时,我有这个代码
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly()
我的单元测试模拟了所有数据库访问,因此事务处理不是问题。 (我有 @SpringBootTest
的集成测试和完整的 trx 支持。)不幸的是,回滚语句在纯单元测试中失败。
有没有简单的方法让回滚语句在单元测试的情况下什么也不做?
考虑使用 @Transactional(readOnly=true)
而不是 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly()
。
A boolean flag that can be set to true if the transaction is effectively read-only, allowing for corresponding optimizations at runtime.
现在我只写了一个很容易模拟的小组件:
@Component
public class RollBacker {
public void setRollBackOnly() {
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
}
}
毕竟 TransactionAspectSupport
的单例方法使得这里的单元测试变得困难。恕我直言 TransactionAspectSupport
应该是一个 spring bean。
我有一个复杂的服务方法,它从数据库加载大量数据。因为它只读取和验证数据,所以我想确保
- JPA(Hibernate)不浪费时间检查大持久化 更改的上下文。
- 没有写入数据的意外更改 到数据库。
因此在我的服务即将结束时,我有这个代码
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly()
我的单元测试模拟了所有数据库访问,因此事务处理不是问题。 (我有 @SpringBootTest
的集成测试和完整的 trx 支持。)不幸的是,回滚语句在纯单元测试中失败。
有没有简单的方法让回滚语句在单元测试的情况下什么也不做?
考虑使用 @Transactional(readOnly=true)
而不是 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly()
。
A boolean flag that can be set to true if the transaction is effectively read-only, allowing for corresponding optimizations at runtime.
现在我只写了一个很容易模拟的小组件:
@Component
public class RollBacker {
public void setRollBackOnly() {
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
}
}
毕竟 TransactionAspectSupport
的单例方法使得这里的单元测试变得困难。恕我直言 TransactionAspectSupport
应该是一个 spring bean。