需要解释在使用 Spring 进行测试时预先刷新以避免误报的必要性吗?

2023-11-21

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(使用前将#替换为@)

需要解释在使用 Spring 进行测试时预先刷新以避免误报的必要性吗? 的相关文章

随机推荐

  • Java 错误:EventDispatchThread.run() 行:不可用 [局部变量不可用]

    当我尝试在调试器中启动代码时 出现以下错误 EventDispatchThread run line not available local variables unavailable 代码非常大 我无法在这里发布 但无论如何这里有一些细节
  • 多次登录尝试后实施禁令的最佳方法[关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 在我实施了自己的禁止过多尝试的系统后 过去两天我一直在研究这个问题 但我还没有找到我正在寻找的正确答案 这几乎是 实现这一点的最佳方法是什么 目前我是通过IP封禁的方式实现的 如果同
  • rllib 使用自定义注册环境

    Rllib 文档提供了一些有关如何创建和训练自定义环境 有一些有关注册该环境的信息 但我想它的工作方式需要与健身房登记 我正在与简单走廊环境 如果我将注册码添加到文件中 如下所示 from ray tune registry import
  • 为什么 UIButton 没有返回正确的约束?

    在我下面的代码中 我在垂直滚动视图中添加了 5 个按钮 每个按钮都限制为滚动视图的顶部 20 前缘 后缘及其高度 我创建了一个b1HeightConstraint多变的 它的作用是保持高度约束b1按钮 单击按钮 我试图消除此限制 然而我面临
  • 如何更改颠覆存储库的结构?

    我是 Subversion 的新手 所以我现在不知道这是不是一个愚蠢的问题 我继承了一个具有扁平结构的颠覆存储库 没有 trunk tags branches 顶层 我想重新构造它 使其遵循 trunk tags branches layo
  • 允许逗号和空格分隔的数字列表的正则表达式

    我想使用 javascript 或 jquery 编写正则表达式以允许 逗号分隔的数字列表 OR 空格分隔的数字 OR 逗号后跟空格分隔的数字 OR 上述任何一种的组合 任何非数字 空格或逗号的内容都必须被拒绝 应该通过 111 222 3
  • 如何将 pandas.core.series.Series 转换为列表?

    I tried print type numbers 2 numbers 2 tolist print type numbers 2 那是行不通的 我有
  • 需要可预测的随机生成器

    我是一名网页游戏开发人员 我遇到了随机数问题 假设一名玩家有 20 的几率用剑造成致命一击 这意味着 五分之一的点击应该是关键的 问题是我在现实生活中得到了非常糟糕的结果 有时玩家在 5 次命中中获得 3 次暴击 有时在 15 次命中中没有
  • 访问所有活动中的 GoogleApiClient 对象

    如果大多数人想要使用 Google Plus 登录他们的应用程序 这似乎是一件简单的事情 s 在活动 1 中 我让用户登录 登录后 我想让该用户对象全局可访问 因此我将其添加到 Application 对象中 public class Gl
  • 尝试使用 phusion Passenger 启动 Rails 应用程序时,US-ASCII 中的字节序列无效

    我正在尝试使用 Phusion Passenger 和 RVM 在 Ubuntu 生产服务器上部署 Rails 3 应用程序 我已成功安装 Phusion Passenger 但在浏览器上访问服务器时出现以下错误 Ruby Rack app
  • 当 mongodb 内存不足时会发生什么?

    例如 我的数据库有 20 GB 数据 只有 2 GB 内存 交换已关闭 我能够查找并插入数据吗 性能会有多差 最好用谷歌搜索一下 但许多消息来源表示 当您的工作集超出 RAM 大小时 性能将显着下降 分片可能是一个有趣的选择 而不是添加更多
  • 如何在C中链接多个实现文件

    我有多个 c文件 即实现文件说 main c A c B c 任何文件中的函数都可以调用不同文件中的任何函数 我的问题是 我需要 h即 A 和 B 的每个实现的头文件 其中每个头文件都有以下定义ALLA 或 B 中的函数 另外 main c
  • 如何在 ASP.NET MVC 中将复杂的 ViewModel 传递到服务层?

    假设我有用于用户注册的 RegisterModel 和一些实现 IUserService 的 UserService public interface IUserService User CreateUser User newUser Ht
  • Android - 如何检查 Proguard 混淆是否有效?

    我已经对我的 apk 进行了混淆 但文件大小仅从 12MB 减少到 10 5MB 它只是相对较小的减少的原因可能是因为我的应用程序使用了几个大型库 但是有什么方法可以检查已执行的混淆级别吗 以防万一 这是我的 proguard projec
  • Google Maps API v3:InfoWindow 大小不正确

    当您单击 Google 地图 v3 上的主页图标时 我的 InfoWindow 似乎无法根据 InfoWindow 的内容正确自动调整大小 它在不应该出现的时候提供了滚动条 信息窗口应该正确地自动调整大小 有什么想法吗 根据请求 相关 Ja
  • 适用于 LTE 和 GSM 网络的 eCGI 和 CGI

    我正在尝试确定 UE 连接到的 CGI 小区全局标识符 从3GPP规范来看 它的定义如下 3G CGI PLMN ID LA 代码 CID 4G ECGI PLMN ID ECI 我已经可以从系统中获取LAC 位置区域代码 和CID 小区I
  • 如何在启动时在 Tomcat 配置中指定系统属性?

    我知道我可以通过使用 D 参数传递参数来指定 Tomcat 的系统属性 例如 Dmy prop 值 我想知道是否有一种更简洁的方法可以通过在 context xml 文件或其他一些 tomcat 配置文件中指定属性值来实现此目的 我想这样做
  • 如何处理 DRF 中序列化器中的保留字(来自)

    下面是一个带有保留字的序列化器 from 用于字段 class EdgeSerializer serializers Serializer field name map from from class Meta read only fiel
  • Google Firestore:查询属性值的子字符串(文本搜索)

    我正在寻找添加一个简单的搜索字段 想使用类似的东西 collectionRef where name contains searchTerm 我尝试使用where name searchTerm 但它没有返回任何内容 我同意 Kuba的回答
  • 需要解释在使用 Spring 进行测试时预先刷新以避免误报的必要性吗?

    In the 关于测试的 Spring 文档 它指出 测试 ORM 时避免误报 代码 当您测试涉及以下内容的代码时 ORM 框架 例如 JPA 或 休眠 刷新底层 测试方法中的会话 更新会话的状态 无法刷新 ORM 框架 底层会话可能会产生