gmock之匹配器
背景
继续学习gtest框架,有时候会需要mock数据,这里是对自定义Matcher的学习记录
内置的Matcher
gmock框架中自带Matcher只针对c++内置类型,如string,int,float等等
使用内置Matcher的示例如下:
arg是这个宏中的一个参数,代表被匹配的对象,在这里也就是address,如下图所示
自定义的Matcher
gmock框架中自带Matcher只针对c++内置类型,如string,int,float等等,有时候无法满足项目要求,所以需要编写自己的Matcher对象。
在测试重载的mock函数时,需要对Matcher做特别的封装,否则编译在查找重载函数时会出现歧义。
编写自己的Matcher对象在gmock1.4后变得很容易,gmock框架为我们做了大部分的事情。
以下是两个简单的举例。
(1) 结构体作为自定义Matcher参数
看看如下的代码:
以上MATCHER_P就是自定义的Matcher
MATCHER_P中的P代表参数,MATCHER_P其实应该写成“MATCHER_P1”,表示该matcher的构造函数只接受一个参数,同样的还有“MATCHER_P2、MATCHER_P3,…, MATCHER_P10”。宏的第一个参数代表该Matcher的类名,第二个参数代表Matcher的构造函数中的第一个参数,最后一个空内容的字符代表失败时输出信息,为空那么gmock会默认为你填写相关信息。
arg是这个宏中的一个参数,代表被匹配的对象,在这里也就是address,如下图所示
测试用例编写,如下所示
(2) 一个string作为自定义Matcher参数
另一个简单的示例如下:
1 | //判断当前的参数的值是否符合预期 |
(3) 结论:
1.使用宏MATCHER_P快速编写自己的Matcher对象。
2.在自定义Matcher中使用gtest断言,可以方便验证mock函数的输入否和期望。
参考链接
https://www.cnblogs.com/bourneli/archive/2012/09/08/2676990.html