unit-testing - Spring AbstractTransactionalDataSourceSpringContextTests - 测试方法后不回滚数据

标签 unit-testing jakarta-ee aop spring-aop

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/

相关文章:

jakarta-ee - org.glassfish.hk2.classmodel.reflect.impl.TypesImpl.getType 处的 java.lang.NullPointerException

javascript - 一年后,仍然在单元测试、集成测试和端到端测试中挣扎

JAVA GC : ParNew (promotion failed) , 并发模式失败

node.js - nodejs - 模拟模块,天真的方法

javascript - 从 window.open 弹出窗口中禁用十字按钮

Java 和注入(inject)防御副本

java - 带有方面参数的注释

java - Android AOP/IOC 应用

unit-testing - SWTBot 与单元测试

java - 如何对自定义断言进行单元测试?