something about Google Mock

2023-05-16

下载:http://code.google.com/p/googlemock/downloads/list

 

安装:将下载的压缩包解压出来,到解压目录下执行:

./configure

然后执行:

make

注意,这个make不会编译Google Mock自己的测试用例。要编译它们,需要到解压目录下的“make”子目录下,执行:

make gmock_test

然后就会看到该目录下生成了一个可执行文件 gmock_test ,执行这个可执行文件,就可以看到Google Mock测试用例的执行结果(应该是成功的,如果有失败,则应修改Makefile使之成功):

 

 

Running main() from gmock_main.cc

[==========] Running 13 tests from 3 test cases.

[----------] Global test environment set-up.

[----------] 6 tests from InitGoogleMockTest

[ RUN      ] InitGoogleMockTest.ParsesInvalidCommandLine

[       OK ] InitGoogleMockTest.ParsesInvalidCommandLine (0 ms)

[ RUN      ] InitGoogleMockTest.ParsesEmptyCommandLine

[       OK ] InitGoogleMockTest.ParsesEmptyCommandLine (0 ms)

[ RUN      ] InitGoogleMockTest.ParsesSingleFlag

[       OK ] InitGoogleMockTest.ParsesSingleFlag (0 ms)

[ RUN      ] InitGoogleMockTest.ParsesUnrecognizedFlag

[       OK ] InitGoogleMockTest.ParsesUnrecognizedFlag (0 ms)

[ RUN      ] InitGoogleMockTest.ParsesGoogleMockFlagAndUnrecognizedFlag

[       OK ] InitGoogleMockTest.ParsesGoogleMockFlagAndUnrecognizedFlag (0 ms)

[ RUN      ] InitGoogleMockTest.CallsInitGoogleTest

[       OK ] InitGoogleMockTest.CallsInitGoogleTest (0 ms)

[----------] 6 tests from InitGoogleMockTest (1 ms total)

 

[----------] 6 tests from WideInitGoogleMockTest

[ RUN      ] WideInitGoogleMockTest.ParsesInvalidCommandLine

[       OK ] WideInitGoogleMockTest.ParsesInvalidCommandLine (0 ms)

[ RUN      ] WideInitGoogleMockTest.ParsesEmptyCommandLine

[       OK ] WideInitGoogleMockTest.ParsesEmptyCommandLine (0 ms)

[ RUN      ] WideInitGoogleMockTest.ParsesSingleFlag

[       OK ] WideInitGoogleMockTest.ParsesSingleFlag (0 ms)

[ RUN      ] WideInitGoogleMockTest.ParsesUnrecognizedFlag

[       OK ] WideInitGoogleMockTest.ParsesUnrecognizedFlag (0 ms)

[ RUN      ] WideInitGoogleMockTest.ParsesGoogleMockFlagAndUnrecognizedFlag

[       OK ] WideInitGoogleMockTest.ParsesGoogleMockFlagAndUnrecognizedFlag (0 ms)

[ RUN      ] WideInitGoogleMockTest.CallsInitGoogleTest

[       OK ] WideInitGoogleMockTest.CallsInitGoogleTest (0 ms)

[----------] 6 tests from WideInitGoogleMockTest (0 ms total)

 

[----------] 1 test from FlagTest

[ RUN      ] FlagTest.IsAccessibleInCode

[       OK ] FlagTest.IsAccessibleInCode (0 ms)

[----------] 1 test from FlagTest (0 ms total)

 

[----------] Global test environment tear-down

[==========] 13 tests from 3 test cases ran. (1 ms total)

[  PASSED  ] 13 tests.

 

 

 

 

其他记录:

(1)Google Mock对象在析构的时候会检查mock函数的执行结果是否与预期相符,如果mock对象一直存在,最终的检查就不会发生。因此,如果你在堆(heap)中创建mock对象的话,最好使用内存泄漏检查工具来确定你的test是否做好了mock对象销毁工作。

(2)Google Mock要求在调用mock函数之前设置好预期的结果,否则其行为就是“未定义”的。

(3)使用EXPECT_CALL() 宏来设置一个mock函数调用的预期结果。其语法为:

 

EXPECT_CALL(mock_object, method(matchers))

.Times(cardinality)

.WillOnce(action)

.WillRepeatedly(action);

 

 

第一个参数是mock对象,第二个参数是mock函数名及其参数。二者中间是以逗号(而不是点号)分隔的,至于为什么是这样,回答只有一个:技术原因。

宏后面还可以紧跟若干语句,以提供对mock函数调用的预期结果的更多信息。这种风格的语法被一些人称作是“特定领域语言”(Domain-Specific Language,DSL)。

(4)Google Mock中有一些可能初次见到时感觉比较陌生的概念,例如 matcher,cardinality,etc.  这些概念在gmock的手册中都有详细说明,网上也可以找到一些中文文档,为了能真正用起来gmock,一定要看清了这些概念的含义。

(5)一个返回值为 bool 类型的mock函数默认是返回 false 的!所以,如果你没有设置函数的默认返回值,你的test函数被调用了之后很可能只执行了一部分(例如,你的test函数调用了一个mock函数,而该函数在返回 false 时,将不再继续执行其后的代码),这样你的test将不能覆盖某函数的全部代码,而这并不是你乐见的,切记。

(6)在mock对象析构时,对“期望”的检验才会被执行,所以,如果你的mock对象一直没有析构(例如,你在堆中创建了一个mock对象,却忘了删除它 。有人说可以用内存检查工具来防止这一点,但是要知道没有工具是可以保证100%可靠的),则检验一直不会被执行。如果你担心这种情况,就可以主动进行检验:

Mock::VerifyAndClearExpectations(&mock_object):

该方法返回一个bool值,以显示检验是否成功(true代表成功)。所以,你可以把它嵌套在EXPECT_TRUE()或者ASSERT_TRUE()里面来测试检验结果。

(7)gmock安装包解压目录下的“scripts”子目录下,有一个Python脚本fuse_gmock_files.py,这个脚本一般用不到,它是用来合并Google Mock的文件的。Google Mock包含N多文件,如果你要自己扩充它的功能,那么你就需要自行修改某些文件的源码,如果你把Google Mock拷贝到另一台计算机上,从头开始修改很多个文件的源码可能就很麻烦,所以脚本fuse_gmock_files.py就可以将Google Mock原来的N多文件合并为三个文件:gtest/gtest.h,gmock/gmock.h 和 gmock-gtest-all.cc。这样的话就方便多了。

(8)Google Mock有三个(主要的)指导文档,其难度由低到高分别为:ForDummies,CheatSheet,CookBook。所以,如果你刚接触gmock,应该按这个顺序依次学习那三个文档。

 

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

something about Google Mock 的相关文章

  • 程序员应该掌握的10个搜索技巧

    程序员应该掌握的10个搜索技巧 txt 程序员应该掌握的10个搜索技巧 txt Google搜索 1 准确搜索 2 排除关键词 3 用 Either OR 或 逻辑进行搜索 4 同义词搜索 5 在站内进行搜索 6 善用星号 7 在两个数值之
  • Cellant:中文基站+google地图+轨迹记录+自制基站数据库

    资料名称 Cellant 中文基站 google地图 轨迹记录 自制基站数据库 0 a7Y6 H Z7e 国内领先的通信技术论坛MSCBSC 移动通信论坛6d x0k2 H g4F r j 资料作者 jesperzx k A5t C m t
  • 谷歌技术"三宝"之BigTable

    谷歌技术 三宝 之BigTable 2006年的OSDI有 两篇google的论文 分别是BigTable和Chubby Chubby是一个分布式锁服务 基于Paxos算法 BigTable是一个用于管理结构化数据的分布式存储系统 构建在G
  • 震惊,微信小程序可以设置网络字体!真香

    准备工作 获取字体链接 还原设计稿的时候需要用到如下特殊字体 google 的 Montserrat https fonts google com specimen Montserrat 选择这个字体 下载全部字体 将本地的字体文件上传到自
  • 申请带@msn.com后缀的邮箱

    很多朋友总是抱怨申请msn邮箱时总是申请到 hotmail com的 为什么申请不到 msn com的呢 我从网上Google了一下 这个地址是申请简体中文MSN邮箱的 https accountservices passport net
  • document.documentElement.scrollTop(获取滚动条位置)

    document documentElement scrollTop 收集关于scrollTop信息 要获取当前页面的滚动条纵坐标位置 用 document documentElement scrollTop 而不是 document bo
  • Code For Better 谷歌开发者之声 ——Tensorflow与深度学习

    给大家推荐一款丧心病狂的API测试工具 Apifox Apifox 是接口管理 开发 测试全流程集成工具 定位 Postman Swagger Mock JMeter 点击此处跳转体验 目录 一 TensorFlow简介 二 机器学习与深度
  • 接口的Mock测试及Mockito使用

    参考链接 1 Mock测试的目的两个 1 验证方法调用 2 指定某个方法的返回值 或者是执行特定的动作 2 所谓的mock就是创建一个类的虚假的对象 在测试环境中 用来替换掉真实的对象 以达到两大目的 验证这个对象的某些方法的调用情况 调用
  • zxing二维码的生成与解码(C#)(附例子)

    二维码的生成 using com google zxing qrcode using com google zxing using com google zxing common using ByteMatrix com google zx
  • Android控件之AutoCompleteTextView、MultiAutoCompleteTextView探究

    在Android中提供了两种智能输入框 它们是AutoCompleteTextView MultiAutoCompleteTextView 它们的功能大致一样 显示效果像Google搜索一样 当你在搜索框里输入一些字符时 至少两个字符 会自
  • word2vector学习笔记(一)

    word2vector学习笔记 一 最近研究了一下google的开源项目word2vector http code google com p word2vec 其实这玩意算是神经网络在文本挖掘的一项成功应用 本文是看了论文 Distribu
  • 中国猎头公司排名 (前十)

    4月3日 平时能够收到不少猎头公司排名评选的邀请 但自己一直怀疑这类排名评选的可行性和公信力 人为因素在这样的评选中占了太大的成分 因为喜欢搜索这个职业 所以我一直是一个谷歌Google的粉丝 Google的成功和深入人心和它坚持自己的 搜
  • 比尔盖茨现身西雅图SAS 2007“治疗失眠”

    结束了4月18 21号的访华活动 比尔盖茨又现身在了西雅图5月8号开始的为时两天的第八届微软战略合作伙伴高峰会议上 Strategic Account Summit Conference 这次会议请来了众多重量级的大腕嘉宾 包括负责微软网络
  • Google Protocol Buffer 的使用和原理

    Google Protocol Buffer 的使用和原理 刘 明 软件工程师 上海交大电子与通信系 简介 Protocol Buffers 是一种轻便高效的结构化数据存储格式 可以用于结构化数据串行化 很适合做数据存储或 RPC 数据交换
  • java指纹识别+谷歌图片识别技术(采用Hash方法)

    转载自 http blog csdn net yjflinchong article details 7469213 java指纹识别 谷歌图片识别技术 前阵子在阮一峰的博客上看到了这篇 相似图片搜索原理 博客 就有一种冲动要将这些原理实现
  • DNS污染与DNS劫持

    先认识一下什么是DNS DNS 是域名系统 Domain Name System 的缩写 在Internet上域名与IP地址之间是一对一 或者多对一 的 域名虽然便于人们记忆 但机器之间只能互相认识IP地址 它们之间的转换工作称为域名解析
  • 以一个最简单的例子把OO的JavaScript说明白

    OO的JavaScript并不高深 麻烦就麻烦在google出来的国人介绍文章经常罗罗嗦嗦 而且之间的说法还各有不同 摆在一起就让人看了头大 这里重拾简单主义 以一个最简单的例子把OO Javascript说明白 1 一个颇为精简的例子 只
  • 【历史上的今天】10 月 2 日:ENIAC 计算机退休;贝尔德发明电视;香港科技大学办学

    整理 王启隆 透过 历史上的今天 从过去看未来 从现在亦可以改变未来 今天是 2021 年 10 月 2 日 在历史上今天发生的科技关键事件不比昨天要少 举世闻名的通用电子计算机 ENIAC 便在今天退休 我国享誉世界的学府香港科技大学正式
  • 安装DirectXSDK时提示Error Code s1023

    向开发DirectX 3D游戏 就安装DirectX最新版 安装时遇到Error Code s1023 试了好多办法都不行 关掉所有程序还是不行 感谢伟大的Google在一个英文网站上提到如果安装了Microsoft Visual C 20
  • 如何在 Fedora 和 RHEL 系统中安装 Google Chrome

    Google Chrome 是一款功能强大 快速且流行的网络浏览器 以其简约的设计和强大的功能套件而闻名 虽然 Fedora 和 Red Hat Enterprise Linux RHEL 系统配备了默认的 Web 浏览器 大多数情况下为

随机推荐

  • 卷积神经网络之AlexNet网络详解

    一 介绍 Alex Krizhevsky等人训练了一个大型的卷积神经网络用来把ImageNet LSVRC 2010比赛中120万张高分辨率的图像分为1000个不同的类别 在测试卷上 xff0c 获得很高准确率 top 1 and top
  • 如何分清分布式、高并发与多线程

    当提起这三个词的时候 xff0c 是不是很多人都认为分布式 61 高并发 61 多线程 xff1f 当面试官问到高并发系统可以采用哪些手段来解决 xff0c 或者被问到分布式系统如何解决一致性的问题 xff0c 是不是一脸懵逼 xff1f
  • 利用正则表达式排除特定字符串

    查找不以baidu开头的字符串 baidu com sina com cn 正则 xff1a baidu 匹配结果就是第2行 xff0c 也就是第1行被排除了 这里使用了零宽度断言 exp 注意 xff0c 我们有一个向前查找的语法 也叫顺
  • 自学记录--python小知识

    os path 的一些功能 根据实际项目中的例子来理解一下大体的用法 xff0c 目前只接触了几个方法 例1 xff1a 我是在c python django ttsx2 ttsx goods views py工作 xff0c 运行环境是在
  • django配置连接多个数据库,和把应用名字在admin后台显示为中文

    django配置连接多个数据库 xff0c 自定义表名称 在项目tt下新建两个app xff0c 分别为app01 app02 配置app01使用default节点数据库 xff1b app02使用hvdb节点数据库 xff08 也可以配置
  • 自学记录--字符串,列表,字典的常用方法

    字符串常见操作 如有字符串mystr 61 39 hello world itcast and itcastcpp 39 xff0c 以下是常见的操作 lt 1 gt find 检测 str 是否包含在 mystr中 xff0c 如果是返回
  • 自学记录--django模型使用记录

    对于重要数据都做逻辑删除 xff0c 不做物理删除 xff0c 实现方法是定义isDelete字段 xff0c 类型为BooleanField 默认值为False 字段类型概括 AutoField xff1a 一个根据实际ID自动增长的In
  • 自学记录--django模板使用记录

    模板template相关知识及问题 xff1a 过滤器 xff1a value floatformat gt 不给参数的话会将浮点数的小数位舍入到一个小数位 例 xff1a value 61 34 256 gt 结果为34 3 value
  • 自学记录--django+uwsgi+nginx部署

    一 xff1a 服务器环境配置 在本地的虚拟环境中 xff0c 项目根目录下 xff0c 执行命令收集所有包 pip freeze gt plist txt 通过xftp软件将开发好的项目和收集的包上传到服务器某个目录在服务器上面安装并创建
  • 赛码-三分线-java

    题目描述 小赛很喜欢看A队和B队的篮球比赛 众所周知 xff0c 篮球每回合根据投篮远近可以得2分或3分 如果投篮距离小于d那么得2分 xff0c 大于等于d得3分 我们将d记为三分线 每次小赛都喜欢通过改变三分线的大小来让自己支持的A队获
  • xrdp远程登录恢复上一次登陆会话

    本文参考Xrdp Tip How to reconnect to the existing session while using the xrdp package from Ubuntu Repository 首先连接远程桌面是观察连接时
  • 查看Debian版本

    查看Debian版本信息命令如下 xff1a lsb release a 参考运行截图 xff1a
  • Linux 服务器安装配置 TimeMachine

    Linux 服务器安装配置 TimeMachine 1 安装 Time Machine 相关的后台服务 1 安装netatalk xff1a apt get install netatalk 2 安装 dbus xff1a apt get
  • Linux命令总结--特殊符号命令

    Linux中特殊符号大全 井号 comments 管理员 普通用户 脚本中 bin bash bin sh 井号也常出现在一行的开头 xff0c 或者位于完整指令之后 xff0c 这类情况表示符号后面的是注解文字 xff0c 不会被执行 T
  • ZeroMQ学习笔记(5)——高级发布订阅模式

    第五章 高级发布订阅模式 何时使用发布 订阅模式 如何处理过于慢速的订阅者 xff08 自杀蜗牛模式 xff09 如何设计高速订阅者 xff08 黑盒模式 xff09 如何监控一个发布 订阅网络 xff08 特浓咖啡模式 xff09 如何建
  • n个数依次入栈,出栈顺序有多少种?

    这个问题是卡特兰数的第n项结果 卡特兰数 卡特兰数前几项为 1 1 2 5 14 42 132 429 1430 4862 16796 58786 208012 742900 2674440 9694845 35357670 1296447
  • cas-overlay-template实现单点登录步骤

    转载 https blog csdn net zlsuperjj article details 92439816 搭建CAS SERVER 这里使用cas overlay template搭建cas服务器 xff0c overlay可以把
  • Ubuntu—Anaconda库介绍

    Ubuntu Anaconda库介绍 库的构成 其库由各个下载的包组成 xff0c 如torch numpy等 安装后 xff0c 除原始包外 xff0c 还有一个链接包XXXXX dist info xff0c 这个是用来实现包的调用的
  • Ubuntu、Debian、Deepin 怎样删除多安装的桌面环境?- Linux 小妙招

    xff08 首发地址 xff1a 学习日记 Ubuntu Debian Deepin 怎样删除多安装的桌面环境 xff1f Linux 小妙招 学习日记 xff09 今天跟大家分享一点使用 Linux 的小技巧 我们在使用桌面 Linux
  • something about Google Mock

    下载 xff1a http code google com p googlemock downloads list 安装 xff1a 将下载的压缩包解压出来 xff0c 到解压目录下执行 xff1a configure 然后执行 xff1a