3

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

我对 AOP 配置或 spring 有问题。我编写了一个扩展类 AbstractTransactionalDataSourceSpringContextTests 的单元测试。对于 AOP 配置,我对要测试的方法做了一个切入点,我对切入点给出了以下建议:

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

请告诉我为什么数据没有被删除,任何帮助都将是可观的。谢谢。

4

1 回答 1

0
  • 正如这里所讨论的,具有传播属性的事务与REQUIRES_NEW任何其他范围更广的事务无关。
  • AbstractTransactionalDataSourceSpringContextTests, 作为AbstractTransactionalSpringContextTests, 不会删除东西,但实际上会回滚测试范围的事务。

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

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

于 2013-03-18T11:17:56.857 回答