In the 关于测试的 Spring 文档, 它指出:
测试 ORM 时避免误报
代码
当您测试涉及以下内容的代码时
ORM 框架,例如 JPA 或
休眠,刷新底层
测试方法中的会话
更新会话的状态。
无法刷新 ORM 框架
底层会话可能会产生错误
积极的一面:你的测试可能会通过,但是
相同的代码在 a 中抛出异常
生活、生产环境。在里面
以下基于 Hibernate 的示例测试
情况下,一种方法显示错误
正法和另一种方法
正确暴露结果
刷新会话。
有人可以解释为什么我需要打电话冲洗吗?
好吧,您实际上跳过了有趣的部分,例如:)这里是:
// ...
@Autowired
private SessionFactory sessionFactory;
@Test // no expected exception!
public void falsePositive() {
updateEntityInHibernateSession();
// False positive: an exception will be thrown once the session is
// finally flushed (i.e., in production code)
}
@Test(expected = GenericJDBCException.class)
public void updateWithSessionFlush() {
updateEntityInHibernateSession();
// Manual flush is required to avoid false positive in test
sessionFactory.getCurrentSession().flush();
}
// ...
这个例子试图说明的是,除非你真的flush
如果您使用会话(又称一级缓存)将内存中的更改与数据库同步,您并没有真正测试数据库集成,并且可能不会测试真正的预期行为或错过问题。
例如,数据库可能会因为违反约束而返回错误,如果您不访问数据库,则不会表现出这种正确的行为,如falsePositive()
测试方法同上。此测试方法应该会失败,或者预期会出现异常但会通过。另一方面,另一种带有刷新的测试方法确实测试了真实的行为。因此需要flush
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)