C++开发测试工具gmock的安装与使用超详解

2023-10-28 12:41

本文主要是介绍C++开发测试工具gmock的安装与使用超详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

    • 一、gmock介绍
    • 二、gmock下载
    • 三、gmock配置
      • 3.1 打开解决方案
      • 3.2 进行相应设置
      • 3.3 目标程序的配置
    • 四、测试 Demo
    • 五、常见问题

一、gmock介绍

gmock是google公司推出的一款开源的白盒测试工具。gmock是个很强大的东西,测试一个模块的时候,可能涉及到和其他模块交互,可以将模块之间的接口mock起来,模拟交互过程。其作用就类似白盒测试中的打桩的概念。google 开源的跨平台C++单元测试框架,是为在不同平台上为编写C++测试而生成的。它提供了丰富的断言、致命和非致命判断、参数化、”死亡测试”等等。
Google Mock(简称gmock)是Google在2008年推出的一套针对C++的Mock框架,它灵感取自于jMock、EasyMock、harcreat。它提供了以下这些特性:

  • 轻松地创建mock类
  • 支持丰富的匹配器(Matcher)和行为(Action)
  • 支持有序、无序、部分有序的期望行为的定义
  • 多平台的支持

二、gmock下载

gmock官网:https://github.com/google/googletest。
官方文档:http://google.github.io/googletest/。

截止到2022年2月,目前有三个发行版本(release):

  • v1.8.1
  • v1.10.0
  • v1.11.0(最新)

由于v1.10.0,v1.11.0以及之后的版本都不存在msvc,需要利用CMake进行编译,因此为简单起见,本文选择的版本是v1.8.1,有需要的也可以在这里进行下载:v1.8.1。

三、gmock配置

3.1 打开解决方案

打开Visual Studio,进入googletest-release-1.8.1\googlemock\msvc\2015目录下,运行gmock.sln解决方案。
在这里插入图片描述

3.2 进行相应设置

编译gmock需要注意以下两点:
①解决方案的平台与目标程序一致,这里选择的是x64;
②版本也要与目标程序一致,这里选择的是release版本;
在这里插入图片描述
设置完成后,右键这三个项目——>生成,进行编译。
编译完成后,会在googletest-release-1.8.1\googlemock\msvc\2015\x64-Release文件夹下生成若干个文件,我们只需要gmock.lib文件(我编译的是release版),如下图所示。
在这里插入图片描述

3.3 目标程序的配置

将googletest-release-1.8.1\googlemock\include目录下的include文件夹内容和googletest-release-1.8.1\googletest\include目录下的include文件夹内容拷贝到我们的目标程序文件夹中,这里面是我们需要的头文件;在目标程序的属性里面设置头文件的包含目录。

设置lib文件的库目录(将.lib文件放在一个单独的文件夹中)如下图所示。
在这里插入图片描述
将lib文件填入附加依赖项:
右键——>属性——>链接器——>输入——>附加依赖项——>加入gmock.lib,如下图所示。
在这里插入图片描述

四、测试 Demo

编写代码之前,首先需要将解决方案的平台与目标程序一致,这里选择的是x64,然后版本也要与目标程序一致,这里选择的是release版本。
在这里插入图片描述
新建一个头文件,命名为Add.h,实现数值相加的功能,代码如下:

#pragma onceint Add(int i, int j)
{return i + j;
}

源程序demo.cpp代码如下:

#include "Add.h"  
#include "gmock/gmock.h"TEST(Add, 负数) {EXPECT_EQ(Add(-1, -2), -3);	//相等EXPECT_GT(Add(-4, -5), -6); //大于(会报错)
}TEST(Add, 正数) {EXPECT_EQ(Add(1, 2), 3);	//相等EXPECT_GT(Add(4, 5), 6);	//大于
}int main(int argc, char** argv)
{testing::InitGoogleTest(&argc, argv);//注册需要运行的所有测试用例return RUN_ALL_TESTS();	//执行测试,成功返回0失败返回1
}

代码中,测试用例 Add包含两个测试,正数和负数(这里利用了Visual C++ 2005以上允许标识符包含Unicode字符的特性)。

运行结果:
在这里插入图片描述

在控制台界面中,通过的测试用绿色表示,失败的测试用红色表示。每个测试的启动用RUN表示,测试的结果用OK(测试成功)或FAILED(测试失败)表示。失败的测试会在RUN和FAILED中间打印输出错误代码行和原因。在最后一个双横线下方(==)显示所有用例和测试统计结果(测试数量、耗时成功测试数量、失败测试数量等)。

五、常见问题

如果读者也像我这样配置,很有可能会遇到这个问题:

错误 LNK2038 检测到“RuntimeLibrary”的不匹配项: 值“MT_StaticRelease”不匹配值“MD_DynamicRelease”(demo3.obj 中) demo3 E:\ProjectTest\demo3\demo3\gmock.lib(gtest-all.obj)

在这里插入图片描述
错误原因:在release下,工程设置中运行库中设置成了"多线程调试 DLL (/MD)"。这个是设置应该是在debug下的设置,release下应该设置“多线程 DLL (/MT)”,如下图所示:

在这里插入图片描述

ok,经过如上配置,应该就没有问题了。


如果没有看懂的话,完整代码可以参考:https://download.csdn.net/download/didi_ya/82936133

以上便是本文的全部内容了,整理不易,如果对你有所帮助,记得点个赞哟~


参考:

  1. https://blog.csdn.net/gubenpeiyuan/article/details/50678697
  2. https://www.cnblogs.com/arxive/p/11220854.html

这篇关于C++开发测试工具gmock的安装与使用超详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/293285

相关文章

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++

详解nginx 中location和 proxy_pass的匹配规则

《详解nginx中location和proxy_pass的匹配规则》location是Nginx中用来匹配客户端请求URI的指令,决定如何处理特定路径的请求,它定义了请求的路由规则,后续的配置(如... 目录location 的作用语法示例:location /www.chinasem.cntestproxy

使用Python实现一键隐藏屏幕并锁定输入

《使用Python实现一键隐藏屏幕并锁定输入》本文主要介绍了使用Python编写一个一键隐藏屏幕并锁定输入的黑科技程序,能够在指定热键触发后立即遮挡屏幕,并禁止一切键盘鼠标输入,这样就再也不用担心自己... 目录1. 概述2. 功能亮点3.代码实现4.使用方法5. 展示效果6. 代码优化与拓展7. 总结1.

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经

C/C++错误信息处理的常见方法及函数

《C/C++错误信息处理的常见方法及函数》C/C++是两种广泛使用的编程语言,特别是在系统编程、嵌入式开发以及高性能计算领域,:本文主要介绍C/C++错误信息处理的常见方法及函数,文中通过代码介绍... 目录前言1. errno 和 perror()示例:2. strerror()示例:3. perror(

Linux中的计划任务(crontab)使用方式

《Linux中的计划任务(crontab)使用方式》:本文主要介绍Linux中的计划任务(crontab)使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、前言1、linux的起源与发展2、什么是计划任务(crontab)二、crontab基础1、cro

kotlin中const 和val的区别及使用场景分析

《kotlin中const和val的区别及使用场景分析》在Kotlin中,const和val都是用来声明常量的,但它们的使用场景和功能有所不同,下面给大家介绍kotlin中const和val的区别,... 目录kotlin中const 和val的区别1. val:2. const:二 代码示例1 Java

CSS will-change 属性示例详解

《CSSwill-change属性示例详解》will-change是一个CSS属性,用于告诉浏览器某个元素在未来可能会发生哪些变化,本文给大家介绍CSSwill-change属性详解,感... will-change 是一个 css 属性,用于告诉浏览器某个元素在未来可能会发生哪些变化。这可以帮助浏览器优化

Python基础文件操作方法超详细讲解(详解版)

《Python基础文件操作方法超详细讲解(详解版)》文件就是操作系统为用户或应用程序提供的一个读写硬盘的虚拟单位,文件的核心操作就是读和写,:本文主要介绍Python基础文件操作方法超详细讲解的相... 目录一、文件操作1. 文件打开与关闭1.1 打开文件1.2 关闭文件2. 访问模式及说明二、文件读写1.

C++变换迭代器使用方法小结

《C++变换迭代器使用方法小结》本文主要介绍了C++变换迭代器使用方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1、源码2、代码解析代码解析:transform_iterator1. transform_iterat