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

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

源码分析         通过《Google Mock(Gmock)简单使用和源码分析——简单使用》中例子,我们发现被mock相关方法mock类中已经被重新实现了,否则它们也不会按照我们期待行为执行...gmock关键字、是否有const属性、参数个数、方法名已经所在行号组成。...MockSpec模板对象之前我们见过,它是为了实现参数筛选而设计。其具体实现我们之后会分析。         无参数版本忽略了很多函数参数问题,但是其让我们可以清晰看见实现脉络。...EXPECT_CALL、ON_CALL宏                 介绍MOCK_METHOD系列宏是,我们发现其我们mock类中定义两个方法和一个变量: GMOCK_RESULT_(tn,...gmock##Method方法EXPECT_CALL宏中被调用

4.1K20

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

三,gmock简介 gmock全称是Google Mock,是Google于2008年推出C++测试工具,gmock是编写和使用C++模拟类框架。...gmock可以快速轻松地定义模拟对象,模拟对象提供与真实对象相同接口。gmock允许开发者定义模拟对象行为,例如调用哪些方法,以什么顺序,调用多少次,传哪些参数,返回什么样值等等。...四,gmock主要特性 1.提供了用于定义模拟行为声明性语法。 2.支持对任意类型函数或被重载函数进行模拟。 3.拥有丰富匹配器,用于验证函数参数。...开发步骤 测试之前: 确定需要模拟类接口 定义Mock类,并继承需要被模拟类 利用MOCK_METHOD宏来模拟虚函数 测试期间: 使用testing命名空间 实例化Mock类,创建模拟对象 设置模拟对象默认行为或期望行为...第4个参数(Specs)为限定符: const——重写const方法时需要带上 override——覆盖virtual方法时需要带上 noexcept——重写noexcept方法时需要带上 b.定义预期行为

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

C++最佳实践 | 2. 代码风格

正确性和脚本 代码风格 代码风格最重要是一致性,其次是遵循C++程序员习惯阅读风格。 C++允许任意长度标识符名称,因此命名时没必要非要保持简洁,建议使用描述性名称,并在风格上保持一致。...使用t_前缀命名函数参数,t_可以被认为是“the”,但其可以表示任意含义,关键是要将函数参数与作用域内其他变量区分开来,同时遵循一致命名策略。...使用nullptr C++11引入了nullptr表示指针,应该用来代替0或NULL来指示指针。 注释 注释块应该使用//,而不是/* */,使用//可以更容易调试时注释掉代码块。...总是使用命名空间 几乎没有理由需要全局命名间中声明标识符。相反,函数和类应该存在于适当命名命名间中,或者存在于命名空间里类中。...放在全局命名间中标识符有可能与来自其他库(主要是没有命名空间C库)标识符发生冲突。

1.1K10

gtest和gmock关系_gtest教程

注:如果不用gmock,仅仅用到gtest,可以将上述gmock部分内容去掉。 对于 c++ 来说写单元测试和 mock 框架不是一件容易事情。...,言简意赅地讲解了C/C++单元测试框架gtest主要使用方法和注意事项,并设计了若干可编译精简示例,给出了运行效果图。...gtest中常用所有结构体、类、函数、常量等,都通过命名空间testing访问,不过gtest已经把最简单常用单元测试功能包装成了一些带参数宏,因此简单测试中常常可以忽略命名空间存在。...,参数为 (statement, type) 需要注意,这些测试宏都接受C/C++语句作为参数,所以既可以像前面那样传递表达式,也可以传递用大括号包起来代码块。... C中,可以实现诸如 SetUp、 TearDown等方法。特别地,测试参数由 TestWithParam实现 GetParam()方法依次返回。 3.

1.7K20

C++初阶】C++入门

参考链接: C++继续声明 C++入门  C++关键字命名空间C++输入&输出缺省参数和函数重载为什么C语言不能重载(原理) C++关键字  1、asm _asm是一个语句分隔符。...一组被大括号包含指令或一对括号。...36、void 特殊""类型,指定函数无返回值或无参数。  命名空间  C++程序当中我们经常见到 using namespace xxxxxxx; 这就是运用了命名空间。...命名空间分为三种:  1.普通命名空间  namespace N1 // N1为命名空间名称 {  // 命名间中内容,既可以定义变量,也可以定义函数  int a;  int Add(int...同一个工程中允许存在多个相同名称命名空间,编译器最后会合成同一个命名间中

1.2K30

C++避坑指南

3.1 隐式转换 C++自定义类型以下两种情况会发生隐式转换: 1) 类构造函数只有一个参数或除第一个参数外其他参数有默认值; 2) 类实现了operator type()函数;...type()条件运算中,可以进行隐式转换,这就是为什么C++智能指针如shared_ptroperator bool()加了explicit还能直接进行条件判断原因。...<明明全局作用于有定义,为什么找不到匹配函数?...前面的代码片段,应用ADLns内找不到自定义operator<定义,接着编译器从最近作用域std内开始向外查找,编译器std内找到了operator<定义,于是停止查找。...好实践:定义一个类时,应当将其相关接口(包括自由函数)也放入到与类相同命名间中

1.5K30

从Xcode10不再支持libstdc++说起

C++标准库是一套基于C++语言之上函数和类库,其早期代码都定义std命名间中,大部分类都是用template模板实现,它主要由IO流,string字符串类,和STL组成。...前面说过老版本C++标准库中所有类定义都是std这个命名间中。...子命名间中 inline关键字则是C++11中为命名空间添加新关键字:可以命名间中定义内联命名空间,内联命名空间可以把其包含名字导入到父命名间中,从而在父命名间中可以直接访问子命名间中定义名字...++类是std::这个命名间中被定义(因为C++命名修饰规则原因,一个方法或者函数被修饰后名称是包含其所在命名空间)。...但是新版本C++标准库中所有符号都是std::__1这个命名间中,因此链接器将无法找到这个符号。

2K30

C++内存管理(new operatoroperator newoperator deleteplacement new)

,未初始化内存,你可以写一种operator new函数,返回一个指针之前可以初始化内存以存储一些数值,可是一般不这么做。...void * operator new(size_t, void *location) {   return location; } 它也是new操作符一个使用方法,须要使用一个额外变量...,第2个参数传递void*指针,第3个参数传递位置 { return &ptr[pos]; } new(p,3)int(10); //将10放在下标为3间中 关于new内部实现机制...注意:真正汇编中没有具体函数名,只有相应地址。显示函数名是VS一个比较便利功能。 ::new与new   全局命名间中有一个自带、隐藏operator new专门用来分配内存。...如果我们想要继续使用默认operator new,就应该写成::new 字面意思就是调用最外层命名间中operator new  值得一提是最外层(也是默认operator new也是可以被重载

1.5K30

C++】基础知识讲解(命名空间、缺省参数、重载、输入输出)

命名空间定义 当有两个同名变量时,会优先在找局部,如果找不到,再找全局。如果我们想打印1,就可以加上 ‘::’ 前面不加域情况下,默认是,也就是全局域,该符号叫域作用限定符。...第三种:使用using将命名间中某个成员引入 命名空间嵌套使用 当定义两个同名函数且同一个命名空间时,可以在里面继续嵌套命名空间,这样就能区分开了。使用时记得有多层解开。...C++输入&输出 说明: 使用cout标准输出对象(控制台)和cin标准输入对象(键盘)时,必须包含头文件 以及按命名空间使用方法使用std。...std命名空间使用惯例: std是C++标准库命名空间,如何展开std使用更合理呢? 日常练习中,建议直接using namespace std即可,这样就很方便。...:是函数一种特殊情况,C++允许同一作用域中声明几个功能类似的同名函数,这 些同名函数形参列表(参数个数 或 类型 或 类型顺序)不同,常用来处理实现功能类似数据类型 不同问题。

10710

头文件string作用_cstring头文件作用

最大区别在于,其中声明名称都是位于std命名间中,而不是后者全局命名空间。...string是c++语言中string类模板申明 CString是MFC中定义字符串类,MFC中很多类及函数都是以CString为参数,另外CString类重载了(LPCSTR)运算符,所以如果你...如果你MFC下使用C++语言中标准 string类,那么调用需要C语言风格字符串为参数win api时,你必须显示调用sting.c_str()成员函数,来完成同样转换,也就是说使用MFC...h”扩展名库文件,比如 iostream.h,新标准后标准库中都有一个不带“。h”扩展名 相对应,区别除了后者许多改进之外,还有一点便是后者东东都塞进了 “std”名字空间中。...生成 新头文件方法只是是将现有C++头文件名中。h 去掉,方法本身不重要,正 如结尾发作效果不一致也并不重要相同。所以变成了,变成了,等等。

4.6K10

C++C++ 入门

文章目录 一、第一个C++程序 二、命名空间 1、什么是命名空间 2、命名空间定义 3、命名空间使用 4、注意事项 三、C++输入输出 四、缺省参数 1、缺省参数概念 2、缺省参数分类 五...命名空间有如下特点: 命名空间名称是随意取命名间中可以定义函数/变量/类型; 命名空间可以嵌套; 同一个工程中允许存在多个相同名称命名空间,编译器最后会将其合成到同一个命名间中命名间中定义函数...,这个域叫做命名空间域,命名间中所有内容都局限于该命名间中; 2、命名间中定义变量都是全局变量:如下图,命名空间N中成员变量a可以函数test被访问,说明a作用域是全局,所以a是全局变量...,就直接到命名间中去找,再找不到就报错。...---- 三、C++输入输出 C++输入输出语句如下: #include // std是C++标准库命名空间名,C++将标准库定义实现都放到这个命名间中 using namespace

2.4K00

C++C++基础语法

使用变量时,默认查找规则:先局部,再全局 图一是创建了命名空间bit,这会打乱默认查找规则,会直接到定义rand命名间中找,即先找指定,所以输出为10,且   命名空间名  +  : : +...---- 2.命名空间嵌套 命名空间可以嵌套多层 namespace N1 { int a; //全局变量 命名间中,只有自定义函数中,才是局部变量。...---- 4.std官方库定义命名空间 一个命名空间就定义了一个新作用域,命名间中所有内容都局限于该命名间中 C++中,我们使用函数都在std命名空间里,所以我们使用时,经常会这样:...---- 三、C++输入和输出  1.使用 cout 标准输出对象 ( 控制台 )和 cin 标准输入对象 ( 键盘 )时,必须 包含 头文件 以及按命名空间使用方法使用...---- 七、指针值nullptr(C++11) C语言中,指针为时为NULL; NULL实际是一个宏,传统C头文件(stddef.h)中, NULL可能被定义为字面常量0,或者被定义为无类型指针

1.3K20

C++打怪升级(一)- 命名空间、缺省形参、重载

编译器查找标识符规则: 默认情况:先在标识符所在作用域向上查找,找不到再去全局作用域向上查找,都找不到就报错; 指定(特定)查找:需要使用域作用限定符::,直接去指定作用域去查找标识符,找不到直接报错...前面已经介绍了使用域作用限定符访问命名间中成员方法,接下来我们来看看另外两种访问命名空间成员方法吧!...介绍之前先来了解一下C++官方库定义命名空间std std - C++标准库命名空间名 C++头文件定义所有内容成员(定义与实现)都处在一个命名空间(作用)域std中,用以与用户使用成员相隔离...我们先来看一个输入输出例子: #include // std是C++标准库命名空间名,C++将标准库定义实现都放到这个命名间中 using namespace std; int...---- 缺省参数是啥 缺省参数即函数默认形参参数定义或声明函数时,其形参可以直接给出形参合适缺省(默认)值;调用含有缺省参数函数时,调用者就可以选择对缺省参数是否进行实参传入了,如果没有指定实参则采用该形参缺省值

79420

更好用测试框架介绍

一切都在doctest命名间中(实现细节一个嵌套detail命名间中)。 所有宏都有前缀——默认情况下有些不带前缀,但这是可选——请参阅配置。...可以程序中设置选项,而不是通过argc/ argv从命令行传入。 自己被禁用时不会产生警告。...现代C++ benchmark库 nanobench也是C++11写header only库,使用起来也很简单,包含头文件即可。...+测试工具链:doctest+FakeIt+nanobench, 可以完美地替代gtest/gmock和google bench,没有任何依赖,无需安装,直接包含头文件就可以用,非常容易集成和使用,是时候抛弃...引用 C++单元测试工具——doctest_蓝月心语博客-CSDN博客_c++ 单元测试 purecpp - a cool open source modern c++ community C++-doctest

1.3K10

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

编写单元测试可以帮助我们开发阶段就发现错误,并且保证新修改没有破坏已有的程序逻辑。 C++之中,常用测试框架有 Gtest,Boost test,CPPUint 等。...正是由于 Gmock 加持,让 Gtest 多种测试框架之中脱颖而出。...TEST_F适用于多种测试场景需要相同数据配置情况,利用了 C++继承类来实现对父类方法测试。...这里我们用到了宏定义 MOCK_METHOD,后面的数字代表了模拟函数参数个数,如MOCK_METHOD0,MOCK_METHOD1。它接受两个参数参数1,方法名称。...这里要注意,通过 Gmock 来编写 Mock Object 时,能够模拟方法是对于原抽象类之中virtual 方法

4.3K51

C++教程(最全)「建议收藏」

);//参数列表为时,()可以不写 //3....c语言中结构体不允许定义函数成员,且没有访问控制权限属性。 c++为结构体引入了成员函数,访问控制权限,继承,多态等面向对象特性。 c语言中,结构体大小为0,而C++中空结构体大小为1。...20 命名空间和异常处理 20.1 命名空间 命名空间实际上是由用户自己命名一块内存区域,用户可以根据需要指定一个有名字空间区域,每个命名空间都有一个作用域,将一些全局实体放在该命名间中,...声明后,using语句所在作用域中使用该命名空间成员时,不必再用命名空间名加以限定。...标准C++所有标识符(包括函数、类、对象和类模板)都是一个名为std命名间中定义。 无名命名空间,只本文件作用域内有效。

2.5K30

C++教程(凯格尔训练法教程)

);//参数列表为时,()可以不写 //3....c语言中结构体不允许定义函数成员,且没有访问控制权限属性。 c++为结构体引入了成员函数,访问控制权限,继承,多态等面向对象特性。 c语言中,结构体大小为0,而C++中空结构体大小为1。...20 命名空间和异常处理 20.1 命名空间 命名空间实际上是由用户自己命名一块内存区域,用户可以根据需要指定一个有名字空间区域,每个命名空间都有一个作用域,将一些全局实体放在该命名间中,...声明后,using语句所在作用域中使用该命名空间成员时,不必再用命名空间名加以限定。...标准C++所有标识符(包括函数、类、对象和类模板)都是一个名为std命名间中定义。 无名命名空间,只本文件作用域内有效。

2.8K20

C++之标准库学习总结

,根本不明白这什么意思);如果进行了左移重载之后,那么程序将产生神奇变化,所以 main() 中不用 printf() 和格式化字符串 '\n' 了,因为编译器会通过重载机制会为我们选择究竟使用哪一个重载机制...二、c++标准库: 1、标准库特性: C++标准库并不是C++语言一部分 C++标准库是由类库和函数库组成集合 C++标准库中定义类和对象都位于std命名间中 C++标准库头文件都不带.h后缀...,是一种将程序库名称封装起来方法,它就像在各个程序库中立起一道道围墙 int main() { printf("Hello world!...c = 5.000000 注:关于命名空间介绍,这里没有详细去介绍,后面会重新做一个详细介绍。...三、总结: C++标准库是由类库和函数库组成集合 C++标准库包含经典算法和数据结构实现 C++标准库涵盖了C库功能 C++标准库位于std命名间中 本期内容对于接触过C++朋友来说,非常简单

38820

C++修行之道】命名空间 、C++输入&输出、缺省参数和函数重载

命名空间 C/C++中,变量、函数和后面要学到类都是大量存在,这些变量、函数和类名称将都存 在于全局作用域中,可能会导致很多冲突。...: 自留地 // b、全局域找 : 村子野地 // c、到展开命名间中查找 : 相当于张大爷自己自留地加了声明,谁需要就来摘 // 指定展开某一个 //using bit::x; /...#include // std是C++标准库命名空间名,C++将标准库定义实现都放到这个命名间中 using namespace std; int main() { cout<...std命名空间使用惯例: std是C++标准库命名空间,如何展开std使用更合理呢? 1. 日常练习中,建议直接using namespace std即可,这样就很方便。...采用C++编译器编译后 结果结论:linux下,采用g++编译完成后,函数名字修饰发生改变,编译器将函数参数类型信息添加到修改后名字中。

4300

GNU C++符号改编机制介绍前言正文

对于不同类中同名函数,或者不同名字空间中同名函数,或者同一名字空间或类中同名重载函数,最终编译和链接过程中是怎么将它们区分开来呢?...8)函数参数是别的命名间中类或结构体 当函数参数含有别的命名间中类或结构体时,该参数别名是“N”(大写),加上空间名长度,再加上空间名,接着是类或结构名长度和类或结构名字,最后以“E...C++程序在编译时候会用符号改编,而C程序调用时候并不会用符号改编,而是还用原始函数名作为符号名进行调用,这样C程序就找不到那个对应C++函数了。...或者,倒过来,C程序在编译时候不会进行符号重编,而C++程序调用时候也会将这个函数名进行重编,这样C++程序同样也找不到那个对应C函数了。...解决方法是把那些需要让C程序用到C++程序中变量和函数,或者C++程序用到C程序中变量和函数,单独抽出来,让编译器不对它们进行符号重编。

77240
领券