首页 > 解决方案 > 如何在 Spring 中为事务方法编写事务单元测试?

问题描述

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

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

更具体地说,我有一个addList()方法的单元测试。但是,在遇到异常时,在单元测试期间,输入列表被部分添加而不是回滚,因为测试本身在事务中运行(由于AbstractUnitTest是事务性的)

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

标签: javaspringtransactions

解决方案


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

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

希望这可以帮助。

贝佩


推荐阅读