java - 如何在 Spring 中为事务方法编写事务单元测试?
问题描述
我在项目中拥有的单元测试类扩展了AbstractUnitTest
一个@Transactional
. 这些类中的测试在一些方法上运行,这些方法本身就是@Transactional
.
每当这些方法导致测试失败时,事务不是回滚,而是部分持久化(在测试环境中,通常它们以原子方式运行)。这使我无法测试我的项目模块的事务行为。
更具体地说,我有一个addList()
方法的单元测试。但是,在遇到异常时,在单元测试期间,输入列表被部分添加而不是回滚,因为测试本身在事务中运行(由于AbstractUnitTest
是事务性的)
删除@Transactional
fromAbstractUnitTest
后,测试工作正常。这种行为的原因是什么?如果单元测试类本身是事务性的,如何执行事务性方法的单元测试?
解决方案
我认为这取决于你的配置:如果你想启动一个事务,你需要为你的单元测试配置一个 TransactionManager。当您使用 Spring 时,请确保已对其进行配置并定义了事务边界(开始/提交或回滚)以确保事务行为(错误时回滚)。
无论如何,我的建议是使用 TransactionalTestExecutionListener 在每次测试后始终回滚:这样每个测试都是独立的,因为它始终使用相同的数据运行。
希望这可以帮助。
贝佩
推荐阅读
- java - 如何创建以非活动文本为后缀的 SWT 文本字段?
- sql - Postgres 异常处理 - “异常”处或附近的语法错误
- reporting-services - 如何在报表生成器 3.0 中将分钟值放在 Y 轴上?
- android - 如何从此切换按钮侦听器返回布尔值?
- git - 当我尝试安装新软件包时,NPM 抛出错误
- c++ - 如何在移动列表视图中添加滚动条?并且用户只能垂直滚动特定区域
- java - 有 Java 街道地址类型吗?
- html - 使用 RegEx 作为输入模式来验证密码
- jboss-cli - 使用 JBoss-CLI 创建 DB2 XA 数据源
- c# - 如何将 asp.net 身份邮件功能用于其他功能 [显示错误]