After running a unit test, data is not getting deleted from the database.
我有 AOP 配置或 spring 的问题。 我编写了一个扩展类 AbstractTransactionalDataSourceSpringContextTests 的单元测试。 对于AOP配置,我对要测试的方法做了切入点,我给了切入点这个建议:
<tx:advice id="newTxAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*" propagation="REQUIRES_NEW" />
</tx:attributes>
</tx:advice>
请告诉我为什么数据没有被删除,任何帮助将不胜感激。 谢谢。
最佳答案
- 正如讨论的那样here ,具有
REQUIRES_NEW
传播属性的事务与任何其他范围更广的事务无关。 AbstractTransactionalDataSourceSpringContextTests
作为一个AbstractTransactionalSpringContextTests
,不会删除内容,但实际上会回滚测试范围的事务。
因此,在您的情况下,您的 transactionManager 很可能在您测试内容时提交新事务,因此当您的外部 tx 回滚时(通过
AbstractTransactionalDataSourceSpringContextTests
),为时已晚:数据已经提交。
要执行您想要的操作,只需使用默认的 REQUIRED
传播即可。我什至建议一般情况下不要使用 REQUIRES_NEW
,除非您有一个存在异常处理问题的特定用例。
关于unit-testing - Spring AbstractTransactionalDataSourceSpringContextTests - 测试方法后不回滚数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13083074/