[英]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.