JUnit 测试总是回滚事务

新手上路,请多包涵

我正在对应用程序 DAO 运行一个简单的 JUnit 测试。问题是我总是得到:

 javax.persistence.RollbackException: Transaction marked as rollbackOnly

JUnit 测试是:

 @RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:com/my/app/context.xml"}
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = false)
@Transactional
public class PerformanceTest {

    @Test
    @Transactional(propagation= Propagation.REQUIRES_NEW)
    @Rollback(false)
    public void testMsisdnCreationPerformance() {
        // Create a JPA entity

        // Persist JPA entity
    }
}

如您所见,我明确声明不回滚此方法。

Spring JUnit 支持是否总是将回滚设置为 true?

原文由 Juan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 500
1 个回答

它应该像您期望的那样工作,但可能是您在被测类中打开了另一个事务,或者您在某处有其他功能/或错误。

顺便说一句,这个注释应该足够了:

 @RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:com/my/app/context.xml"}
@Transactional
public class PerformanceTest {

    @Test
    @Rollback(false)
    public void testMsisdnCreationPerformance() {
        // Create a JPA entity

        // Persist JPA entity
    }
}

@See Spring Reference Chapter 9.3.5.4 Transaction management (or current version )

原文由 Ralph 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题