我正在使用Spring 3.2,Hibernate和JUnit 4。
我的Dao课程如下:
@Transactional public class SomeDaoImpl implements SomeDao {
直接从Web应用程序执行此工作的更新操作。但是,我发现执行更新方法的junit集成测试实际上并不会保留更改。当执行junit方法时,事务是否会滚动事务?
答案 0 :(得分:24)
按reference,在Spring的测试上下文中,事务不持久化。如上所述,虽然不常见,但如果您仍需要这样做,则可以使用@TransactionConfiguration
和@Rollback
来更改默认行为。
答案 1 :(得分:12)
DAO不应该是交易性的。 DAO如何知道它是否应该参与更大的交易?
服务应该在典型的Spring分层架构中拥有交易。
通常以回滚的方式运行数据库的单元测试是很典型的。您不希望您的测试更改数据库,除非您已经设置了一个可以随意删除并重新创建的测试数据库。
问题应该是:您的测试如何编写,提交交易?如果你从未提交,你将永远不会看到记录。
答案 2 :(得分:8)
From the "Testing" section of the docs,您可以使用
@Rollback(false)
注释如果您不希望SpringJUnit4ClassRunner回滚您的交易。