- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在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/
除了如何像文件一样读取和写入套接字之外,我对套接字知之甚少。我对使用套接字选择器有一些了解。我不明白为什么你必须刷新一个套接字,那里实际发生了什么?这些位只是卡在内存中的某个地方,直到它们被推开?我在
我想监控下载数据的进度。我想在传输一定量的数据后进行记录。我的代码: int contentLength = 0; final int bufferSize = 1024*8; byte[] buff
你好, 我编写了一个 Java 程序,它使用 Process 对象和 Runtime.exec() 函数调用启动多个 C++ 编写的程序。 C++ 程序使用 cout 和 cin 作为输入和输出。 J
几天前,我通过阅读官方文档开始对 Rust 进行编程。现在,我正在尝试通过阅读 Brian P. Hogan(The Pragmatic Programmers)所著的“程序员练习”一书来挑战我对 R
我正在使用 Mojolicious::Lite 模块来运行 websockets 服务器来处理协议(protocol)。这是我目前用于客户端的测试代码: socket.onopen = functio
我正在为我的一门类(class)和作业学习 C#,我需要从控制台获取用户输入。 在我的程序中我有: choice = (char)System.Console.Read(); 稍后在我使用的程序中 i
我是一名优秀的程序员,十分优秀!