java - Spring:在 Unittest 中回滚事务
问题描述
我有一个复杂的服务方法,它从数据库加载大量数据。因为它只读取和验证数据我想确保
- JPA (Hibernate) 不会浪费时间检查大型持久性上下文的更改。
- 不会将数据的意外更改写入数据库。
因此,在我的服务即将结束时,我有这个代码
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly()
我的单元测试对所有数据库访问都有模拟,因此事务不是问题。(我也有集成测试@SpringBootTest
和完整的 trx 支持。)不幸的是,回滚语句在纯单元测试中失败。
有没有一种简单的方法可以让回滚语句在单元测试的情况下什么也不做?
解决方案
现在我只写了一个很容易模拟的小组件:
@Component
public class RollBacker {
public void setRollBackOnly() {
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
}
}
毕竟,单例方法TransactionAspectSupport
使得单元测试在这里变得困难。恕我直言TransactionAspectSupport
,应该是春豆。
推荐阅读
- matlab - 使用 fsolve 查找根
- c# - 我如何使它在 UI 打开时我的角色/相机停止移动?
- jquery - Net Core 控制器未接收到 ajax 数据
- c - Execv 系统调用程序没有得到争论
- python - 我如何从 Opencv 获取最新的输出文件
- postman - 为什么 Postman 会忽略变量中的协议和端口号?
- list - python 3,比较两个列表的元素
- python - 如何在python中将多个变量写入.txt文件?
- swift - 如何修复 macOS 的 AppStore 拒绝“您的应用请求管理员访问权限才能运行”
- java - 如何将 Mockito.spy 与匹配器一起使用?