繁体   English   中英

如何在 Spring 中为事务方法编写事务单元测试?

[英]How to write Transactional Unit Tests for Transactional Methods in Spring?

我在项目中的单元测试类扩展了一个AbstractUnitTest类,它是@Transactional 这些类中的测试正在一些方法上运行,这些方法本身就是@Transactional

每当这些方法导致测试失败时,事务不会回滚,而是部分持久化(在测试环境中,通常它们以原子方式运行)。 这阻止我测试我的项目模块的事务行为。

更具体地说,我有一个addList()方法的单元测试。 然而,在单元测试过程中遇到一个异常,输入列表被部分加入,而不是因为,试验本身是在事务运行(凭借回滚AbstractUnitTest是事务)

AbstractUnitTest删除@Transactional后,测试工作正常。 这种行为的原因是什么,如果单元测试类本身是事务性的,你如何执行事务性方法的单元测试?

我认为这取决于您的配置:如果您想启动一个事务,您需要为您的单元测试配置一个 TransactionManager。 当您使用 Spring 时,请确保已配置并定义事务边界(开始/提交或回滚)以确保事务行为(错误时回滚)。

我的建议是无论如何使用 TransactionalTestExecutionListener 在每次测试后总是回滚:这样每个测试都是独立的,因为它总是使用相同的数据运行。

希望这可以帮助。

贝佩

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM