12

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

我的道课如下:

@Transactional public class SomeDaoImpl implements SomeDao {

如果直接从 Web 应用程序执行,则此工作的更新操作。但是,我看到执行更新方法的 junit 集成测试实际上并没有持久化更改。执行junit方法时是否有回滚事务?

4

3 回答 3

25

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

于 2012-05-23T11:30:02.297 回答
13

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

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

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

问题应该是:您的测试如何按照书面形式提交事务?如果你从不提交,你将永远看不到记录。

于 2012-05-23T11:27:09.907 回答
8

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

 @Rollback(false) 

如果您不希望 SpringJUnit4ClassRunner 回滚您的事务,请注释。

于 2012-05-23T11:31:18.803 回答