我正在编写测试以查看我的getHibernateTemplate().delete(x)
是否有效。
现在我发现在单个测试中似乎有一些缓存(我的测试类扩展了扩展AbstractTransactionalDataSourceSpringContextTests
)。
我的意思是以下内容。 我的删除功能:
它存在吗? 是的:删除它并返回true 不:返回false。
现在我尝试在我的测试功能中做两个断言 第一个是assertTrue来检查它是否实际被删除了 第二个是assertFalse,看它正确返回false。
然而,我的第二次测试失败了,当我调试它时确实会转到真正的部分。
但是,如果我添加以下行getHibernateTemplate().find("from classX");
作为删除功能的第一行,它按预期工作。即使我没有做任何价值。所以缓存问题似乎是最符合逻辑的。
有没有人有任何建议,因为留在那里似乎有点脏。
答案 0 :(得分:1)
目前我的计算机上没有这个库,所以我无法告诉你确切的代码,但我认为你需要分开会话。
getSharedEntityManager().flush(); //it's something like this
getSharedEntityManager().clear();
将清理交易并开始新交易,以便您做出更好的假设。我发现你扩展的测试套件与缓存有一些非常奇怪的不一致,所以它不仅仅是你。
答案 1 :(得分:0)
只是一个想法,你可能会忽略这样一个事实:getHibernateTemplate()。dosomething()的所有调用都发生在同一个事务中。由于AbstractTransactionalDataSourceSpringContextTests,在生产中的测试导致两个事务在我的单元测试中的同一事务中结束之前我遇到了问题。
这导致实体已经与第二次调用的hibernate会话相关联,这可以提供指向可能发生的事情的指针。
但是我已经有一段时间看了这个,所以我可能在这里做得很好。