我正在使用 Spring 3.2、Hibernate 和 JUnit 4。
我的道课如下:
@Transactional public class SomeDaoImpl implements SomeDao {
如果直接从 Web 应用程序执行,则此工作的更新操作。但是,我看到执行更新方法的 junit 集成测试实际上并没有持久化更改。执行junit方法时是否有回滚事务?
我正在使用 Spring 3.2、Hibernate 和 JUnit 4。
我的道课如下:
@Transactional public class SomeDaoImpl implements SomeDao {
如果直接从 Web 应用程序执行,则此工作的更新操作。但是,我看到执行更新方法的 junit 集成测试实际上并没有持久化更改。执行junit方法时是否有回滚事务?
通过引用,事务不会在 Spring 的测试上下文中持久化。如前所述,虽然不寻常,但如果您仍然需要这样做,您可以使用@TransactionConfiguration
并@Rollback
更改默认行为。
DAO 不应该是事务性的。DAO 如何知道它是否应该参与更大的交易?
在典型的 Spring 分层架构中,服务应该拥有事务。
通常以回滚的方式为数据库运行单元测试。您不希望您的测试更改数据库,除非您已经设置了一个可以随意删除和重新创建的测试数据库。
问题应该是:您的测试如何按照书面形式提交事务?如果你从不提交,你将永远看不到记录。