如何测试回滚是否按预期工作?

时间:2011-11-15 15:51:55

标签: java spring transactions spring-aop

我正在尝试编写集成/单元测试,其中在执行保存后将DAO应用于异常 - 以验证回滚行为。我的想法是创建一个Spring AOP方面 - 并将@AfterReturning建议应用于DAO上的'save'方法。

DAO已通过@Transactional建议代理。

这看起来是正确的方法吗?

到目前为止,我正在尝试使用Spring ProxyFactory - 在单元测试中代理DAO。

E.g。

 ProxyFactory pf = new ProxyFactory(new MyFaultInjectingAspect());
 pf.setTarget(myDao);
 MyDao proxiedDao = (BookmarkDao) pf.getProxy();

谢谢。

仅供参考:与此Is it ok to use DataSourceTransactionManager for ORM persistence instead of HibernateTransactionManager?

相关

3 个答案:

答案 0 :(得分:1)

从数据库端,您可以使用select for update发出锁定。

http://dev.mysql.com/doc/refman/5.0/en/innodb-locking-reads.html

http://dev.mysql.com/doc/refman/5.0/en/innodb-locking-reads.html

尝试使用您的应用程序提交,您应该看到事务回滚异常,但原因不同。

更新了链接。

答案 1 :(得分:1)

我猜有其他方法没有任何AOP 真的检查数据库中没有写入任何内容:

如果你有一个测试验证(如果没有异常)提交事务,并且实体被写入数据库,那么你只需要简单的第二次测试。

在此测试中,您必须执行相同操作但有例外。然后,您必须只验证注释是否写入数据库。所以你不需要AOP Stuff,你的测试变得更有意义,因为它最终会测试你真正想要的东西。 (我希望理解正确,该角色只是禁止数据库更改的技术。

答案 2 :(得分:-1)