Spring @Transactional在JUnit测试中不起作用?

Nil*_*esh 12 spring hibernate transactional spring-test junit4

我使用的是Spring 3.2,Hibernate和JUnit 4.

我的Dao课程如下:

@Transactional public class SomeDaoImpl implements SomeDao {

如果直接从Web应用程序执行,则对此工作进行更新操作.但是,我发现执行更新方法的junit集成测试实际上并不会保留更改.在执行junit方法时,事务是否会滚动事务?

nob*_*beh 24

通过引用,Spring中的测试上下文中不会持久化事务.如上所述,虽然不常见,但如果仍需要这样做,则可以使用@TransactionConfiguration@Rollback更改默认行为.


duf*_*ymo 12

DAO不应该是交易性的.DAO如何知道它是否应该参与更大的交易?

服务应该在典型的Spring分层体系结构中拥有事务.

通常以回滚的方式运行数据库的单元测试.您不希望测试更改数据库,除非您已设置可以随意删除并重新创建的测试数据库.

问题应该是:你的测试如何编写提交交易?如果你永远不会提交,你将永远不会看到记录.

  • 无论如何,它不应该是对你的答案的评论:-).顺便说一句,上面提到的最佳实践已经很好地发布了.我觉得你迷失在试图迂腐,忘了回答真正的问题! (2认同)
  • 如果最佳实践如此出版,为什么不遵循它?根据你发布的内容,我无法得出你所知道的内容.我想我确实回答了这个问题.你没有提交的事实是恰当的.其他人提出同样的建议.怎么回答这个问题呢? (2认同)

ste*_*own 8

从文档的"测试"部分,您可以使用

 @Rollback(false) 
Run Code Online (Sandbox Code Playgroud)

如果您不希望SpringJUnit4ClassRunner回滚您的事务,则注释.