gmock 可以用于存根 C 函数吗?

2023-12-26

我是 gmock 的新手,所以我想知道如何对在测试中的函数中调用的简单 C 函数进行存根以进行单元测试。

Example:

int func(int a)
{
  boolean find;
  // Some code
  find = func_1();
  return find;
}

我搜索过 gmock,据我了解,gmock 不提供存根简单 C 函数的功能,因此我想问 gmock 是否提供模拟或存根的功能func_1?

如果不是,我该如何存根func_1手动在我的测试代码中而不更改源代码?我正在使用谷歌测试框架进行单元测试。

Thanks.


这是我对这个问题的另一个回答。自从第一个答案过去了两年,我开始明白 GMock 是模拟 C 函数的错误框架。在您有很多函数需要模拟的情况下,我之前发布的答案实在太麻烦了。原因是GMock使用对象接缝用模拟代码替换生产代码。这依赖于多态类,而 C 中不存在多态类。

相反,要模拟 C 函数,您应该使用连接缝,它在链接时用模拟代码替换生产代码。为此目的存在几个框架,但我最喜欢的是假函数框架 (FFF https://github.com/meekrosoft/fff)。查了一下,比GMock简单多了。它在 C++ 应用程序中也能完美运行。

对于有兴趣的人,这里有一个Michael Feathers 介绍了不同的接缝类型。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

gmock 可以用于存根 C 函数吗? 的相关文章

随机推荐

  • 使用“全局命名空间”;

    我只是想知道是否有一种方法可以使用 use 关键字使类的行为就像在全局命名空间中一样 因此该类只能从类的外部表现为命名空间类 就像是 namespace wherever somewhere deep deep inside use roo
  • Ruby on Rails 的弹出窗口

    我有用于 Popup 的 javascript 作为 POPUP JS 在我看来我想使用弹出窗口 它显示为 HTML a href exam groups 1 answers answer class submit button a
  • chrome 请求长时间未决

    在 Chrome 上测试我的网络应用程序时 我注意到一个请求需要很长时间才能加载 有时需要 20 秒 根据heroku日志 at info method GET path 1 message feeds competition id xxx
  • 将哈希值传递给 Powershell 函数问题

    我肯定错过了什么 我必须变量 var1 和 var2 var1 gm TypeName System Collections Hashtable 每个都有 IP 和 Port 属性 例如 var1 0 ip 1 1 1 1 var1 0 p
  • ES6 - 警告:setState(…):无法在现有状态转换期间更新

    我正在重写一些旧的 ReactJS 代码 并在修复此错误时陷入困境 该错误在控制台中重复了大约 1700 次 DOM 根本不渲染 警告 setState 无法在现有状态期间更新 过渡 例如在render或其他组件的 构造函数 渲染方法应该是
  • 如何在 morris.js 条形图上放置文本

    我有一个 morris js 条形图 我想放置count在此图的顶部 我调查了morris js 酒吧文档 http www oesmith co uk morris js bars html 找不到任何 悬停时应该显示value但在栏顶部
  • 如何检查一个元素是否在嵌套列表中?

    如何检查元素是否在嵌套列表中 我正在尝试定义一个函数nested x ys 测试一个值是否x出现在整数的嵌套列表内部ys 结果必须具有价值True of False 循环嵌套列表并测试它们 这any 功能 http docs python
  • 实体框架 6.1.1 和 Npgsql 2.2.3:找不到兼容的实体框架数据库提供程序

    我正在 Visual Studio 2012 Update 4 中使用 EntityFramework 6 1 1 和 npgsql 2 2 3 开发一个项目 为此 我使用提供的设置安装了 npgsl 并安装了 nuget 包 Npgsql
  • 如何使用代码从电池优化中排除 Android 应用

    我是 Android 新手 现在正在开发一个基于 GPS 的项目 我从互联网 traccar 获得源代码 我的要求是应用程序应该每 1 公里或每 1 小时更新一次位置 但问题是应用程序在一段时间 10 20 分钟 后无法在后台运行 有什么解
  • Ajax 调用始终返回错误 500 客户端

    我试图将数据发布回位于 Default aspx 中的 webmethod jquery代码 data saveData testtestest ajax type POST contentType application json cha
  • 如何以固定宽度打印字符串?

    我有这段代码 打印字符串中所有排列的出现 def splitter str for i in range 1 len str start str 0 i end str i yield start end for split in spli
  • sql查询在多个列上不同

    我有这些数据 我正在尝试查找字段 1 2 3 4 中有不同 id 但有重复数据的情况 id field1 field2 field3 field4 1 A B C D 2 A B C D 3 A A C B 4 A A C B 所以 在这种
  • Angularjs 列表项边距问题将 ng-repeat 元素与静态元素相结合

    我想通过将存储在数组中的一些元素与一些将直接插入 html 中的静态元素分组来创建一个水平列表 像这样的事情 div class list container push down ul li Home li li i label li li
  • “datetime.time”没有“mktime”

    我正在尝试将日期时间对象转换为 UNIX 时间戳 最好以毫秒为单位 尽管我不介意有或没有 Mktime 似乎是通常获取它的方法 但是我不断收到错误 AttributeError 类型对象 datetime time 没有属性 mktime
  • pyqt从线程发出信号

    我正在尝试从多个线程更新 pyqt QProgressBar 据我了解 执行此操作的最佳方法是将信号发送回主 GUI 线程 我尝试将 QProgressBar 对象传递给工作线程 尽管它看起来确实如此 工作时我在口译员中收到了大量警告 在下
  • 在 Tensorflow 中将张量转换为 numpy 数组?

    使用带有 Python 绑定的 Tensorflow 时如何将张量转换为 numpy 数组 TensorFlow 2 x 热切执行 https www tensorflow org guide eager默认情况下是启用的 所以只需调用 n
  • 用于自定义 URL 的自定义 Pinterest 按钮(文本链接、图像或两者)

    我试图找到解决方案 但找不到 我需要 Pinterest 固定 按钮的自定义图像 并通过 url 固定一些自定义图像 但不是当前页面 我创建了一个自定义链接 a href class pinitbutton Pin It a 在样式中我设置
  • Liburl 未更新

    我使用的是 Ubuntu 14 04 需要curl 版本 gt 7 40 因此我按照一些步骤安装了最新的curl 版本 7 48 As root wget http curl haxx se download curl 7 48 0 tar
  • 调整窗口大小事件

    我正在创建一个简单的操作系统应用程序 但我无法在任何地方找到如何进行调整大小事件 假设我想打印新的宽度和高度并且我有这个控制器 class ViewController NSViewController override func view
  • gmock 可以用于存根 C 函数吗?

    我是 gmock 的新手 所以我想知道如何对在测试中的函数中调用的简单 C 函数进行存根以进行单元测试 Example int func int a boolean find Some code find func 1 return fin