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 函数吗? 的相关文章

  • 未找到 DEADLINE 调度策略

    我想在 C 中实现 DEADLINE 调度策略 我知道该功能已实现Linux 3 14 10我正在使用 Ubuntu 14 04Linux 3 17 0 031700 lowlatency 201410060605 SMP PREEMPT这
  • 并行运行多个任务

    我有一个代理列表 每个代理都会访问不同的站点并从站点中提取所需的数据 目前它一次只做一个 但我希望同时运行 10 20 个任务 这样它就可以一次性从 20 个站点下载 而不是只下载一个 这是我目前正在做的事情 private async T
  • CMake(Ninja 后端)使用 /MT 编译

    我有一个类似的问题CMake 使用 MT 而不是 MD 进行编译 https stackoverflow com questions 14172856 cmake compile with mt instead of md但有一些差异 我正
  • Visual Studio 2013 调试器显示 std::string 的奇怪值

    我有一个大型的 cmake 生成的解决方案 其中包含许多项目 由于某种原因 我无法查看字符串的内容 因为根据调试器 Bx Buf含有一些垃圾 text c str 正确返回 Hello 该问题不仅仅发生在本地字符串上 返回的函数std st
  • 我担心我添加了太多接口

    我正在构建我的领域模型并继续重构它 正如我所做的那样 我发现我喜欢接口 因为它允许我根据接口为具体类型创建可重用的方法 控制器 视图 但是 我发现每次向域实体之一添加新属性时 我都会创建一个接口 例如 我有一个会员状态从抽象继承的对象Ent
  • Windows Phone 7 - ScrollViewer 值已更改

    我一直在寻找解决方案 但无法找到正确的解决方案 我的网格宽度为 960 并且有ScrollViewer在里面 现在我想知道滚动时滚动的值 水平偏移 我找到的所有解决方案都是针对 wpf silverlight 的 它对我不起作用 Edit
  • 加载 QPixmap 数据的更好方法

    更好的方法来做到这一点 没有QImage QImage image width height QImage Format RGB888 memcpy image bits m frameRGB gt data 0 height width
  • 重载算术运算符

    赋值运算符可以声明为 T 运算符 const t 在类中 但不能以这种方式定义算术运算符 它必须是友元函数 我不明白为什么 你能解释一下吗 算术运算符不必须是友元 那么你可以这样定义 MyClass MyClass operator con
  • 注入包含接口的所有已注册实现的 Enumerable

    给出以下接口 public interface IMyProcessor void Process 我希望能够注册多个实现 并让我的 DI 容器将它们的可枚举注入到这样的类中 public class MyProcessorLibrary
  • 更改私有模块片段是否会导致模块重新编译?

    On 此页面有关 C 20 模块功能 https www modernescpp com index php c 20 modules private module fragment and header units 我发现了这样的说法 借
  • 为什么连续抛出 2 个异常不会生成无法访问的代码警告?

    为什么以下代码行不会创建编译器警告 void Main throw new Exception throw new Exception 据我所知 编译器应该通知您无法到达第二个抛出异常 这显然是一个编译器错误 它是在 C 3 0 中引入的
  • 使用任一默认捕获模式时,这是通过复制捕获还是 (*this) 通过引用捕获?是一样的吗?

    当我看到以下工作时我有点困惑 struct A void g void f g 但后来我发现this https stackoverflow com a 16323119 5825294答案非常详细地解释了它是如何工作的 本质上 它归结为t
  • MINIX内部碎片2

    我正在用 C 语言编写一些软件 它递归地列出给定目录中的所有文件 现在我需要计算出内部碎片 我花了很长时间研究这个问题 发现 ext2 上的内部碎片只发生在最后一个块中 我知道理论上你应该能够从索引节点号获得第一个和最后一个块地址 但我不知
  • 将 AutomationID 与 ListView 结合使用

    我正在尝试将 AutomationId 附加到列表视图中的项目 理想情况下 将项目名称绑定到显示的项目
  • 如何在Windows窗体中打开进程

    我想在我的 Windows 窗体应用程序中打开进程 例如 我希望当用户按下 Windows 窗体容器之一中的按钮时 mstsc exe 将打开 如果他按下按钮 它将在另一个容器上打开 IE DllImport user32 dll SetL
  • Clang 5.0 上的 vsprintf 和 vsnprintf [-Wformat-nonliteral] 警告

    我有这段代码 static void err doit int errnoflag int level const char fmt va list ap int errno save unsigned long n char buf MA
  • 查找数组中的多个索引

    假设我有一个像这样的数组 string fruits watermelon apple apple kiwi pear banana 是否有一个内置函数可以让我查询 apple 的所有索引 例如 fruits FindAllIndex ap
  • 跟踪白色背景中的白球(Python/OpenCV)

    我在 Python 3 中使用 OpenCV 来检测白场上的白 黑球 并给出它的精确 x y 半径 和颜色 我使用函数 cv2 Canny 和 cv2 findContours 来找到它 但问题是 cv2 Canny 并不总是检测到圆的完整
  • 稀疏矩阵超定线性方程组c/c++库

    我需要一个库来解决 Ax b 系统 其中 A 是一个非对称稀疏矩阵 每行有 8 个条目 而且可能很大 我认为实现双共轭梯度的库应该没问题 但我找不到一个有效的库 我尝试过 iml 但 iml sparselib 包中缺少一些标头 有小费吗
  • 如何使用 Microsoft Graph API 更新 MailboxSettings

    我想从不同的日历更新邮箱设置 如何构建可以通过 Microsoft Graph 更新 MailboxSetting 的请求 这是我的代码示例 但有例外 代码示例 User obj GraphServiceClient Users roomC

随机推荐

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

    我只是想知道是否有一种方法可以使用 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