gpt4 book ai didi

hibernate - 需要解释事先冲洗的必要性以避免在使用 Spring 进行测试时出现误报吗?

转载 作者:行者123 更新时间:2023-11-28 19:44:03 24 4
gpt4 key购买 nike

spring documentation regarding testing ,它指出:

Avoid false positives when testing ORM code

When you test code involving an ORM framework such as JPA or Hibernate, flush the underlying session within test methods which update the state of the session. Failing to flush the ORM framework's underlying session can produce false positives: your test may pass, but the same code throws an exception in a live, production environment. In the following Hibernate-based example test case, one method demonstrates a false positive and the other method correctly exposes the results of flushing the session.

有人可以解释为什么我需要调用 flush 吗?

最佳答案

好吧,你实际上跳过了有趣的部分,例子 :) 这里是:

// ...

@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 session (A.K.A. 一级缓存)将内存中的变化与数据库同步,否则你并不是在真正测试数据库集成并且可能不会测试真正的预期行为或遗漏问题。

例如,数据库可能会因为违反约束而返回错误,如果您不访问数据库,您将不会表现出这种正确的行为,如 falsePositive()上面的测试方法。此测试方法应该会失败,或者预计会出现异常但只会通过。另一方面,另一种带有 flush 的测试方法确实测试了真实的行为。因此需要 flush

关于hibernate - 需要解释事先冲洗的必要性以避免在使用 Spring 进行测试时出现误报吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3562399/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com