首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Google Mock(Gmock)简单使用和源码分析——源码分析

上述代码第17行定义了一个具有mutable属性的变量,之所以使用mutable是因为它可能会被使用在const类型的函数中,然而该对象的方法并不一定是const的。...::Function::Argument##N         Function模板类在之前我们反复见过,它的一个非常大的作用就是从函数类型中拆分出函数返回值类型和各个参数类型...2中的函数是使用gmock和函数名联合组装成的新函数名,它返回了一个被参数筛选的函数对象。EXPECT_CALL和ON_CALL宏中就是调用了它。...(true)).WillRepeatedly(testing::Return(false));         这例子说,Pay行为有5次可控的执行次数,第6次执行就按默认值返回了。...第1个WillOnce规定第一次执行Pay的行为,第2个WillOnce规定第二次执行Pay的行为,之后的3~5次都按WillRepeatedly规定的方式去执行。

4.6K20

CC++生态工具链——接口模拟工具gmock

gmock一开始是独立维护的,后面被集成进了gtest(GoogleTest),成为gtest的一个子模块,安装了gtest后就可以开始使用gmock。...gmock可以快速轻松地定义模拟对象,模拟对象提供与真实对象相同的接口。gmock允许开发者定义模拟对象的行为,例如调用哪些方法,以什么顺序,调用多少次,传哪些参数,返回什么样的值等等。...(ON_CALL, EXPECT_CALL) 运行代码,检查是否与预期相符 注意:Mock更强调的是依赖的接口如何返回,而不是依赖的具体实现。...,比如该方法被调用一次返回什么值 WillRepeatedly(action):缺省/重复行为 代码样例: using ::testing::Return; ...EXPECT_CALL(turtle,...,第一次返回100,第二次返回150,然后每次返回200。

3K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    gtest和gmock的关系_gtest教程

    ASSERT_DOUBLE_EQ EXPECT_DOUBLE_EQ 双精度浮点值相等 ASSERT_NEAR EXPECT_NEAR 浮点值接近(第3个参数为误差阈值) ASSERT_STREQ EXPECT_STREQ...调用默认构造函数创建一个新的带固件对象。 2. 立即调用 SetUp函数。 3. 运行 TEST_F体。 4. 立即调用 TearDown函数。 5....但在某些情况下,我们可能需要在各个测试间共享一个相同的环境来保存和传递状态,或者环境的状态是只读的,可以只初始化一次,再或者创建环境的过程开销很高,要求只初始化一次。...,可以利用特定的函数返回值、函数的输出(outbound)参数、或者设置全局变量(如C标准库定义的 errno,Windows API中的“上次错误”(last error)代码,Winsock中与每个...四、值参数化测试 有些时候,我们需要对代码实现的功能使用不同的参数进行测试,比如使用大量随机值来检验算法实现的正确性,或者比较同一个接口的不同实现之间的差别。

    1.9K20

    Google Mock(Gmock)简单使用和源码分析——简单使用

    Gmock就是一个强大的模拟接口的工具。 使用方法         首先我们讲解一下其主要的使用方法。...如果登录失败,则直接返回;如果登录成功,则执行支付行为。最后将流程的状态输出。         那我们如何使用Gmock辅助测试呢?         ...先举一个例子,我们要求Online在第一调用时返回true,之后都返回false。Login一直返回false。Pay一直返回true。也就是说用户第一次支付前处于在线状态,并可以支付成功。...行的意思是Online在调用一次后返回true,之后的调用返回默认的false。...行我们使用Times函数,它的参数5表示该函数期待被调用5次,从第6次的调用开始,返回默认值。

    8.1K21

    Google 单元测试框架

    ,但是我们可以在运行时指定他的行为,如何被使用,使用多少次、参数,使用时返回什么等。...测试程序 参考 gmock 编程指导和 codebook gmock mock 对象,可以定义函数期望行为,如被调用时返回的值,期望被调用的次数,参数等,如果不满足就会报错。...4次 // 否则报错 // 第一次调用返回100, 第二次150,之后都是200 EXPECT_EQ(turtle.GetX(), 100); EXPECT_EQ...举个例子,mock 一个接口 a(int),我们设置第一个期望: a 调用传入参数任意,调用次数任意;然后设置第二个期望: a 调用传入参数必须为1, 调用次数为2;当我们调用 a(1) 两次后,达到了第二个期望上边界...(此时第二个期望并不会失效),这时候,第三次调用 a(1) 就会报错,因为匹配到第二个期望说调用超过2次。

    2.2K20

    基于 hook 和 gmock 开展单元测试

    对这种既有入参,又有返回值的函数,相对是比较好设计case并进行结果验证的,我们重点关注入参i在不同取值的情况下,函数返回结果是否符合预期。...C++允许用基类的指针来调用子类的函数,举个例子,就很容易明白了,如图6: 图6基类指针调子类函数 非虚函数不具备这样的特性,无法很方便的使用gmock。...Linux上的hook和windows上的原理差不多,操作基本上是对目标函数进行劫持,替换成自己的函数,然后在自己的函数中进行一些用户预期的操作,比如修改函数返回值等。...百度以及公司内部都基于hook以及gmock,对gtest进行了二次封装,形成了自己的单元测试框架btest和ttest。...(3)SDK测试除了要保证接口本身的功能外,更多的还要关心第三方使用者会如何用,即调用场景。UT不需要关心外部如何调,更加聚焦函数本身。

    5.6K30

    gtest整理_softest

    一个程序有不同模块相互耦合,某个模块未完成可能影响其他已完成模块的测试,这时可以利用gmock 隔离 这些模块,模拟未完成模块的功能,进而测试已完成模块的逻辑。 每完成一个模块就用gtest进行验证。...参数 cardinality 可以使用如下几个函数设置: 函数方法 说明 AnyNumber() 这个函数可以被调用任意次 AtLeast(n) 这个函数最少被调用n次 AtMost(n) 这个函数最多被调用...n次 Between(m, n) 这个函数被调用m到n次之间(包括m和n) Exactly(n) or n 这个函数只能被调用n次 如果.Times缺省,gtest遵循下列原则: 如果既没有设置 .WillOnce...也没有 .WillRepeatedly, 则视为调用了 .Times(1); 如果调用了 n 次 WillOnce (n >= 1) 且没有调用 .WillRepeatedly,则视为调用了.Times...(n); 如果调用了 n 次WillOnce (n >= 0) 且调用了一次 .WillRepeatedly,则视为调用了Times(AtLeast(n))。

    1.5K20

    面向 C++ 的现代 CMake 教程(五)

    我们将通过回顾章节列表、回顾其内容,并选择其中描述的技巧和工具来开始规划,以构建我们的计算应用程序: 第1章,CMake 的初步步骤: 第一章为我们提供了关于 CMake 的基本信息——如何安装它以及如何使用其命令行构建准备好的项目...第2章,CMake 语言: 在这里,我们介绍了编写正确的列表文件和脚本所需的工具。我们分享了关于代码:注释、命令调用和参数的基本信息。我们还详细解释了变量、列表和控制结构,并介绍了一些非常有用的命令。...lambda 函数构造函数提供的第一个调用库的Calc::Sum方法,并使用结果值打印带有sum的标签(通过调用下面的text()函数)。...同样,标签用于呈现在构建时通过连续三次调用text()收集的BuildInfo::值。...在这个项目中我们实际上并没有使用 GMock,但这两个框架都包含在一个单一的存储库中,因此我们也需要配置 GMock。

    18400

    Go 单元测试之mock接口测试

    生成的模拟实现将包含一个 EXPECT 方法,用于设置预期的行为,以及一些方法实现,这些实现将返回默认值或调用真实的实现。 例如,如果你的接口定义在 ....(默认为true) 五、打桩(stub) 在测试中,打桩是一种测试术语,用于为函数或方法设置一个预设的返回值,而不是调用真实的实现。在 gomock 中,打桩通常通过设置期望的行为来实现。...例如,您可以为 myServiceMock 的 DoSomething 方法设置一个期望的行为,并返回一个特定的错误。...屏蔽:不想在单元测试用引入数据库连接等重资源 补齐:依赖的上下游函数或方法还未实现 gomock支持针对参数、返回值、调用次数、调用顺序等进行打桩操作。...gomock.Nil():表示空值的参数 SetArg(n, value):设置第n(从0开始)个参数的值,通常用于指针参数或切片 六、总结 6.1 测试用例定义 测试用例定义,最完整的情况下应该包含

    20310

    c语言之指针与数组知识点随笔

    如果pa指向数组中某个特定元素pa = &a[i],那么,pa+1将指向下一个元素,pa+i将指向数组当前之后的第i个元素,而pa-i将指向当前数组元素之前的第i个元素。...第一个函数alloc(n)返回一个指向n个连续字符存储单元的指针,alloc函数的调用者可利用该指针存储字符序列。第二个函数afree(p)释放已分配的存储空间,以便以后重用。...我们使用指针allocp指向allocbuf中的下一个空闲单元。当调用alloc申请n个字符的空间时,alloc检查allocbuf数组中有没有足够的剩余空间。...如果有足够的剩余空间,则alloc返回allocp的当前值(即空闲块的开始位置),然后将allocp加n以使它指向下一个空闲区域。如果空闲空间不够,则alloc返回0。...p是指向字符的指针,所以每执行一次p++,p就将指向下一个字符的地址,p-s则表示已经检查过的字符数,即字符串的长度。

    74920

    GTEST学习总结

    一个空指针NULL 与 空字符串是不相等的。 2.3创建测试用例 创建一个测试用例(TEST): 1.使用锚 TEST() 2.函数体支持C++语句 3.测试结果的成功与否与断言语句有关。...使用protected 启动它的主体,因为我们需要从子类访问fixture的成员 2.在类中,声明需要使用的对象 3.如有必要,写一个默认的构造函数 或 SetUp() 方法 用来 为每个测试准备对象...使用 fixture时,需要使用TEST_F() TEST_F(TestCaseName,TestName){ ..testBody.. } 这里的TestCaseName, 要与第1....每执行一个TEST_F(),会执行一次fixture中的SetUp() 和 TearDown(); 执行测试: 在main函数中调用RUN_ALL_TESTS() main函数写法如下: int main...最大为 5,即最多支持5个参数的谓词断言;注意,当谓词函数存在重载时,需要指定调用的哪个类型的函数,否则会出错; 另外,在使用到模板谓词函数时,存在多个参数时,需要在调用时将模板函数括起来,否则,也会出错

    72630

    年度考核如何实现排名?

    1.如何排名? 排名函数(rank),返回指定数值在特定区域中的排名。...2.如何选择排名方式? 从上面的案例中,我们看到,猴子和马云都是排第1的,有两个第1;而后就是苏火火,排在了第3,而不是第2。 那么如何实现,猴子和马云都是排第1,苏火火排在第2(而不是第3)呢?...可以看到,两个并列排名第1之后,紧随的是第2,而不是从第3开始。 那么,这个公式怎么理解呢?我们拆解每一步来看下。...如果你对上面的公式理解起来实在很费劲,其实对于这种排名还有一个更简单的方法,那就是借助数据透视表。 3.如何用数据透视表实现排名?...在数据区域任意一单元格单击,插入数据透视表 把“姓名”拖到行,把“分数”拖到值,连续拖两次。

    81400

    面向 C++ 的现代 CMake 教程(三)

    如果从调用方法返回的值与期望不符,每个函数都将调用std::exit(1)。...一个例子可能是在实际数据库客户端之内的内存映射。 存根为方法调用提供特定的、预先录制的回答,限于测试中使用的回答。它还可以记录调用了哪些方法以及发生了多少次。 模拟是存根的一个更扩展版本。...这就是 GMock 出现的地方:它允许开发人员为特定类创建一个通用的测试替身,并在每一行中定义其行为。GMock 将这些替身称为“模拟”,但实际上,它们是上述所有类型的混合,具体取决于场合。...我们如何确认返回的值确实是随机数和提供给类的值的准确和?正如我们所知,依赖随机性是许多重要过程的关键,如果我们使用不当,我们可能会遭受各种后果。检查所有随机数直到我们耗尽所有可能性并不太实用。...Times链式调用明确指出,为了测试通过,必须发生多少次调用。WillOnce确定在方法调用后,模拟框架做什么(它返回3)。 借助 GMock,我们能够一边表达期望的结果,一边表达被模拟的行为。

    66900

    gtest单元测试框架介绍及简单使用

    断言中提供以下几种检查方法: 布尔类型检查 二值检查 字符串检查 异常检查 浮点检查 相近值检查 二 .宏测试 TEST宏 TEST宏的第一个参数是test_suite_name(测试套件名...测试套件(Test Case)是为某个特殊目标而编制的一组测试输入、执行条件以及预期结果,以便测试某个程序路径或核实是否满足某个特定需求。 测试特例是测试套件下的一个(组)测试。...一个TEST_F不会影响另一个TEST_F所使用的数据,多个测试场景需要相同数据配置的情况用 TEST_F。 TEST_P宏 在设计测试案例时,经常需要考虑给被测函数传入不同的值的情况。...我们之前的做法通常是写一个通用方法然后编写在测试案例调用它。即使使用了通用方法,这样的工作也是有很多重复性的。...用TEST这个宏,需要编写如下的测试案例,每输入一个值就需要写一个测试点,这还只是在一个测试中,如果把每个测试点单独创建一个测试,工作量就更大。使用TEST_P这个宏,对输入进行参数化,就简单很多。

    4.1K32

    C++雾中风景番外篇2:Gtest 与 Gmock,聊聊C++的单元测试

    3.Gmock 的使用 上述 Gtest 的使用应该能够满足绝大多数小型项目的测试场景了。但是对于一些涉及数据库交互,网络通信的大型项目的测试场景,我们很难仿真一个真实的环境进行单元测试。...至于如何使用 Mock Object 呢?这里要引出本章的主角 Gmock 了,接下来笔者将编写一个简要的 Mock对象并进行单元测试,来展示一下 GMock 的用法。...这里我们用 Gmock 模拟一个 kv 存储引擎,并运行一些简单的测试逻辑。...ASSERT_EQ(kvdb->remove("1"), Status::FAIL); } 由上述代码可以了解,这里通过了EXPECT_CALL来指定 Mock Object 的对应行为,其中 WillOnce代表调用一次返回的结果...通过链式调用的方式,我们就可以构造出所有我们想要的模拟结果。当然如果每次调用的结果都一样,这里也可以使用WillRepeatedly直接返回对应的结果。

    4.8K51

    读完这篇文章轻松理解递归算法

    递归的基本原理 第一:每一级的函数调用都有自己的变量。 第二:每一次函数调用都会有一次返回。 第三:递归函数中,位于递归调用前的语句和各级被调用函数具有相同的执行顺序。...我们需要找出当参数为啥时,递归结束,之后直接把结果返回,请注意,这个时候我们必须能根据这个参数的值,能够直接知道函数的结果是什么。 第三要素:找出函数的等价关系式。...当前调用结束后,程序控制权将返回给调用它的recurs(),而该recurs()将执行其statements2部分,然后结束,并将控制权返回给前一个调用,依次类推。...下面,我们通过两个例子来学习一下,递归的使用: 方法: 求解目标:把关注点放在要求解的目标上。 关系:找到第n次与第n-1次之间的关系。 初始值:确定第1次返回结果。...模拟连续发生的动作 方法: 连续动作:搞清楚连续发生的动作是什么。 关系:搞清楚不同动作之间的关系。 边界条件:搞清楚边界条件。 2.1 十进制转二进制 这里我使用的方法是:除2取余,逆序排列。

    68620

    【优选算法篇】算法江湖中的碎玉拾光——C++模拟题全解,踏步逐章细细品味

    字符之外,不存在连续重复的字符。 在完成所有转换(可能无需转换)后,返回最终的字符串。如果有多个解决方案,返回其中任何一个即可。 示例 1: 输入:s = "?...时间复杂度和空间复杂度 时间复杂度:O(n),其中 n 是 timeSeries 的长度,需要遍历数组一次。 空间复杂度:O(1),只使用常数空间来存储结果。...每一行的字符位置都可以按特定间隔获取: 第一行和最后一行形成等差数列,间隔为 2 * numRows - 2。 中间行字符按两个等差数列交替出现。...外观数列 题目描述: 给定一个正整数 n,输出外观数列的第 n 项。 「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。...时间复杂度和空间复杂度 时间复杂度:O(n * m),其中 n 是调用次数,m 是字符串长度(字符串随着项数增加而增大)。 空间复杂度:O(m),用于临时存储字符串。

    10310

    Matlab数据处理

    %例1: x=[-43,72,9,16,23,47]; y=max(x) [y,k]=max(x) 当参数为矩阵时,函数有三种调用格式: (1)max(A):返回一个行向量,向量的第i个元素是矩阵A的第...dim取1时,该函数的功能和max(A)完全相同;dim取2时,该函数返回一个列向量,其第i个元素是A矩阵的第i行上的最大值。...调用格式: corrcoef(A):返回由矩阵A所形成的一个相关系数矩阵,其中,第i行第j列的元素表示原矩阵A中第i列和第j列的相关系数。...每个分段内构造一个三次多项式,使其插值函数除满足插值条件外,还要求在各节点处具有连续的一阶和二阶导数。 多项式次数并非越高越好。...四种方法的比较: 线性插值和最近点插值方法比较简单。其中线性插值方法的计算量与样本点n无关。n越大,误差越小。 3次埃尔米特插值和3次样条插值都能保证曲线的光滑性。

    18210
    领券