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

时间:2012-10-26 08:02:55

标签: unit-testing java-ee aop spring-aop

  

运行单元测试后,数据不会从中删除   数据库中。

我遇到AOP配置或弹簧问题。 我编写了一个单元测试,扩展了AbstractTransactionalDataSourceSpringContextTests类。 对于AOP配置,我已经对将要测试的方法进行了切入点,我已经将这个建议提供给了切入点:

<tx:advice id="newTxAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="*" propagation="REQUIRES_NEW" />
    </tx:attributes>
</tx:advice>

请告诉我为什么数据没有被删除,任何帮助都会很明显。 感谢。

1 个答案:

答案 0 :(得分:0)

  • 正如here所述,具有REQUIRES_NEW传播属性的事务与任何其他更广泛的事务无关。
  • AbstractTransactionalDataSourceSpringContextTests,作为AbstractTransactionalSpringContextTests,不会删除内容,但实际上会回滚测试范围的事务。

因此,在您的情况下,您的transactionManager很可能在测试内容时提交新事务,因此当您的外部tx被回滚时(通过 AbstractTransactionalDataSourceSpringContextTests),为时已晚:数据已经提交。

要做你想做的事,只需使用默认的REQUIRED传播。我甚至建议不要一般使用REQUIRES_NEW,除非你有一个特殊用例和异常处理问题。

相关问题