我有一个复杂的服务方法,该方法从数据库加载大量数据。由于它只读取和验证数据,因此我想确保
因此,在我服务结束时,我将获得此代码
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly()
我的单元测试具有对所有数据库访问的模拟,因此事务不是问题。 (我已经使用@SpringBootTest
进行了集成测试,并且还提供了完整的trx支持。)不幸的是,回滚语句在纯单元测试中失败。
是否有一种简单的方法来获取回滚语句,以防在进行单元测试时什么都不做?
答案 0 :(得分:0)
现在我只写了一个易于模拟的小组件:
@Component
public class RollBacker {
public void setRollBackOnly() {
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
}
}
毕竟,TransactionAspectSupport
的单例方法使这里的单元测试变得困难。恕我直言TransactionAspectSupport
应该是一颗四季豆。
答案 1 :(得分:-1)
考虑使用@Transactional(readOnly=true)
代替TransactionAspectSupport.currentTransactionStatus().setRollbackOnly()
。
如果事务实际上是只读的,则可以将其设置为true的布尔值标志,从而允许在运行时进行相应的优化。