我正在尝试编写集成/单元测试,其中在执行保存后将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();
谢谢。
相关答案 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)