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

时间:2012-05-23 11:23:08

标签: spring hibernate junit4 spring-test transactional

我正在使用Spring 3.2,Hibernate和JUnit 4。

我的Dao课程如下:

@Transactional public class SomeDaoImpl implements SomeDao {

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

3 个答案:

答案 0 :(得分:24)

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

答案 1 :(得分:12)

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

服务应该在典型的Spring分层架构中拥有交易。

通常以回滚的方式运行数据库的单元测试是很典型的。您不希望您的测试更改数据库,除非您已经设置了一个可以随意删除并重新创建的测试数据库。

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

答案 2 :(得分:8)

From the "Testing" section of the docs,您可以使用

 @Rollback(false) 

注释如果您不希望SpringJUnit4ClassRunner回滚您的交易。