新学习一个知识点,学习一个主流的C++单元测试框架googletest,简称GTest。GTest也模仿了XUnit单元测试框架的风格,由于C++语言的特点,GTest一般都是开发人员使用,而且使用真的不算多,因为开发人员都不喜欢写测试代码。如果想要做C++产品的白盒测试或者接口测试,学习GTest是一个比较好的单元测试框架,会帮助我们提升编写单元测试用例的速度。
GTest网上有很多文章,很多都是介绍第一篇环境搭建,然后就不了了之。确实看到过一位大牛写过GTest的一个系列文章,写的很好。我想我接下来写的一个学习笔记,会参考这个系列。我的想法是,写的更详细一些,让更多测试开发能够参与到C++的单元测试中来。
开发环境简介
这里重点介绍googletest的环境配置过程。其实vs 2017社区版本也可以,cmake-gui.exe下载比较费劲,官网基本上下载不了,大家自行搜索解决。
1.GTest版本和下载
下载地址:https://github.com/google/googletest/releases
这个页面是googletest发版页面,可下载不同版本,这里我当然选择最新v1.10.0版本
点击上面那个zip,下载到本地。
2.Cmake-gui.exe编译GTest生成VS工程
解释一些这里为什么要使用cmake-ui.exe,主要是现在的企业开发,基本上都是基于64位操作系统。网上介绍GTest的文章都是32位版本。这里利用Cmake-gui.exe可以帮助我们生成32位还是64位,哪一个VS版本可以打开的工程文件。具体操作如下
上面解压出来zip文件内容结构如下
一般来说单元测试用GTest就可以,有时候需要打桩做白盒测试,可以使用GMock框架。到这里,我们依然不知道怎么打开这个工程,获取相关的GTest头文件和lib文件。
先在这文件夹下新建一个bin文件夹,待会用来输出编译之后的文件内容
到以上路径,双击打开cmake-ui.exe,
先上面两个文件路径选择如上图,点击Confiure,弹出页面设置如下
这是关键,能选择x64,如果你是vs2017 第一个就选vs 2017,这里我用vs 2015,点击Finish,等待一会出现如下页面
点击Generate,几秒最后一行日志显示 Generate done,一般这里不会出错。关闭这个对话框,到bin文件夹看看
上面红圈都是一些vs工程,选择红圈那个解决方案入口,双击,默认使用2015打开,接下来就可以进行编译。
接下来就可以选择Release还是Debug进行编译,如果不考虑多线程执行选项。
可右键gtest这工程,选择属性
这个多进程不同值可以参考你自己的实际项目,这里我们默认就好。
接下来开始编译 Debug X64
等一会,日志输出应该没有失败的
再次切换到Release X64 点击编译。然后可以关闭这个VS 解决方案,退出VS,接下来看看编译之后的GTest的文件夹内容
我们主要是获取Debug或Release下的gtest和gmock相关的lib文件,后续会用到
以上是lib文件的路径,需要区分debug和release版本,上面Debug文件夹中gtestd.lib, 这个d单词表示debug。
顺便找到include的文件夹位置
3.GTest工程创建和配置
打开VS2015,新建一个解决方案。选择win32控制台应用程序,取一个名称LearnGtest
点击确定,然后一直点击默认下一步,直到完成向导,看到下面页面
接下来开始配置工程属性,需要用到上面Gtest的include文件夹路径和相关lib文件
1.先配置Debug X64环境
虽然我们选择win32 控制台类型,默认是x86,这里我们改成Debug x64.
点击解决方案名称,右键-属性
根据上面红圈位置,点击找到上面这张图,然后添加debug的gtest的include文件夹的路径
点击确定,然后点击左侧 “链接器”
点击右侧,这里添加debug版本的gtestd.lib
点击 两次确定 关闭属性配置页面
2.找到main入门,修改代码如下
LearnGtest.cpp代码修改如下并保存
// LearnGtest.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "gtest/gtest.h"
int main(int argc, char **argv)
{
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
点击 生成-生成解决方案,观察日志
这个错误是我们当前VS工程LearnGtest的属性面板中关于多线程这块选择值和我们最早编译Gtest这块不一致,改成一致就好。这里我们是练习项目,所以该LearnGtest工程属性就好。如果是实际工作项目,肯定需要回到VS 2015打开Gtest,把多线程改成和项目一致,再次编译debug和relase版本的Gtest.
这里改成和gtest Debug类型一致就可以,再次点击生成解决方案
到了这里,没有出错,很好,然后来运行这个main方法,看看输出内容
到了这里,表示我们Debug版本下gtest环境搭建成功。接下来和上面截图步骤一样,也需要把Release的搭建好。
也需要改多线程,这里是选择MT。确保在Release环境也能生成解决方案成功,点击调试-开始执行(不调试)运行后可以打开cmd控制台,打印gtest PASS的输出内容。
到这里,我们接下来需要学习Gtest的开发环境都配置完成。这里头文件和lib都是用gtest,如何后面需要使用到gmock,我们当前LearnGtest这个工程可以把gmock相关的lib和头文件配置好,也就可以使用gmock的功能。