【发布时间】:2014-04-01 08:16:06
【问题描述】:
我想测试一个通过在循环中调用 DAO 将数据插入表中的服务方法。服务方法用
注释@Transactional(propagation = Propagation.REQUIRES_NEW)
单元测试调用服务方法并用
注释@Transactional
现在我想告诉事务它总是应该在最后进行回滚。我不想在测试运行后手动清理数据库。
@Rollback 和 EntityManager.getTransaction().setRollbackOnly() 不起作用。我认为原因是注释和 setRollbackOnly() 仅应用于由测试方法创建的事务,而不应用于由服务方法创建的事务。
有人知道怎么解决吗?
【问题讨论】:
-
模拟DAO,手动将其注入到新构建的服务中,并测试方法。您不需要 Spring 上下文或事务来对服务进行单元测试。
-
这就是我现在正在做的事情。但无论如何,我还是想知道是否可以将事务设置为rollbackonly。
-
如果你这样做,你就不需要回滚任何东西,因为你不会有事务。
new Service(mockDao).callMethod()不启动事务,所以没有什么可以回滚的。 -
请尽量以科学的方式理解问题。我不需要解决方案来继续我的工作。我只是想知道这是否可能,以及 - 如果可以的话,我该怎么做。
-
可以做什么?回滚不存在的事务?不,这是不可能的。
标签: spring jpa junit spring-transactions