C++ 测试框架 GoogleTest 初学者入门篇 乙
*以下内容为本人的学习笔记,如需要转载,请声明原文链接微信公众号「ENG八戒」https://mp.weixin.qq.com/s/aFeiOGO-N9O7Ab_8KJ2wxw

开发者虽然主要负责工程里的开发任务,但是每个开发完毕的功能都是需要开发者自测通过的,所以经常会听到开发者提起单元测试的话题。那么今天我就带大伙一起来看看大名鼎鼎的谷歌 C++ 测试框架 GoogleTest.
本文上接《C++ 测试框架 GoogleTest 初学者入门篇 甲》,欢迎关注微信公众号【ENG八戒】查看更多精彩内容。

安装配置环境
Googletest 的安装配置过程并不复杂,但是对于小白来说还是有些困难,所以很有必要手把手说一下。
为了更清晰地说明环境配置过程,下面会选择对 Googletest 源码执行编译,然后安装。编译源码时,Googletest 官方手册推荐使用的工具有两种,这里只介绍其中的 Cmake。
其实在各个平台,用户都有使用 Googletest 的需求,这里专挑 Linux 和 Windows 平台来分别说明怎么安装配置 Googletest。
linux 平台
我的虚拟机里 Linux 系统是 Ubuntu 18.04,使用 apt 在线直接安装的 cmake 版本最高只能去到 3.10,为了顺利编译最新版的 Googletest 源码,选择安装官网最新版的 cmake。
安装最新版 cmake
先卸载原来的 cmake 版本,再添加指定安装源为 kitware.com 并更新安装缓冲,最后开始安装,下面的指令可依次操作
# 卸载 cmake
sudo apt purge --auto-remove cmake
# 下载 cmake 安装包,
wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | gpg --dearmor - | sudo tee /etc/apt/trusted.gpg.d/kitware.gpg >/dev/null
sudo apt-add-repository 'deb https://apt.kitware.com/ubuntu/ bionic main'
sudo apt update
sudo apt install cmake
下载编译 gtest 开发包
下载安装源码包
sudo apt-get install libgtest-dev
进入源码安装目录,执行编译
cd /usr/src/gtest
sudo cmake CMakeLists.txt
sudo make
编译完之后,我看到网上有些教程会推荐直接拷贝库文件(.a)到 /usr/lib 目录
sudo cp *.a /usr/lib
不过,我建议是直接用 install 命令,这样库文件和头文件都可以一步部署到位
sudo make install
好了,到这里 ubuntu 下面的 googletest 就安装结束了,你也可用之前的应用样例来验证一下环境是否 OK 。
Windows 平台
在 Windows 平台安装最新版 cmake 比较简单,这里掠过。
我这里安装的版本是
cmake version 3.24.2
CMake suite maintained and supported by Kitware (kitware.com/cmake).
下载编译 googletest 源码包
这里选择 googletest 的最新稳定版源码包,可以去 github 下载,下面贴出我这边实验用的下载链接
https://codeload.github.com/google/googletest/zip/refs/tags/v1.13.0
下载之后解压到本地文件夹,进到这个本地文件夹,然后启动命令行终端 cmd,当前位置应该是这个本地文件夹,接着按照下面的指令去编译,默认输出静态的调试版本库文件(.lib)
mkdir build && cd build
cmake ..
cmake --build .
编译成功后,在目录 .\build\lib\Debug 下面多了很多生成文件,但是我们只需要这两个静态库文件
gtest.lib
gtest_main.lib
那么,怎么输出动态的调试版本库文件(.lib)呢?

按照上图修改保存,然后输入和上面一样的编译指令即可。
编译成功后,在目录 .\build\bin\Debug 下面多了很多生成文件,但是我们只要这两个动态库文件
gtest.dll
gtest_main.dll
另外,和编译静态库文件一样,在目录 .\build\lib\Debug 下生成的这两个静态库文件也是需要的,用于链接目标 exe 文件。
gtest.dll
gtest_main.dll
测试工程配置示例
新建一个测试工程 TEST,调用 googletest 库分为静态调用和动态调用,分别对应上一节的两种输出文件,现在就分开来演示一下怎么配置目标测试工程。
TEST 工程只有一个源码文件 main.cpp
调用静态调试库
首先,需要找到 googletest 的源码目录下的 .\googletest\include\gtest

把整个文件夹拷贝到目标测试工程 TEST 目录下,然后把 gtest 编译输出的静态库文件(.lib)也拷贝到目标测试工程 TEST 的 .\gtest\lib 目录下

然后看一下 CMakeLists.txt 可以这样写
cmake_minimum_required(VERSION 2.14)
project(runTests)
# Locate GTest
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
message("CMAKE_CURRENT_SOURCE_DIR:" ${CMAKE_CURRENT_SOURCE_DIR})
link_directories(${CMAKE_CURRENT_SOURCE_DIR}/gtest/lib)
# for window static debug
set(CMAKE_CXX_FLAGS_DEBUG "/MTd")
# for window dynamic debug
# set(CMAKE_CXX_FLAGS_DEBUG "/MDd")
# for window dynamic release
# set(CMAKE_CXX_FLAGS_DEBUG "/MD")
# for window static release
# set(CMAKE_CXX_FLAGS_DEBUG "/MT")
# Link runTests with what we want to test and the GTest and pthread library
add_executable(${PROJECT_NAME} main.cpp)
target_link_libraries(${PROJECT_NAME}
gtest
gtest_main)
Cmake 工程的编译方法都是一样的,照搬上面提到的编译指令即可,这里略过
调用动态调试库
配置过程,和调用静态调试库是差不多的,但是在把 gtest 编译输出的静态库文件(.lib)拷贝到目标测试工程 TEST 的 .\gtest\lib 目录下时,也需要把 gtest 编译输出的动态库文件(.dll)一起拷贝到目标测试工程 TEST 的 .\gtest\lib 目录下,这样的目的是为了在测试工程 TEST 编译的过程中,方便部署可执行文件(.exe)的运行环境,也就是 exe 文件依赖的 googletest 库文件。
然后看一下 CMakeLists.txt 可以这样写
# for default window dynamic debug
cmake_minimum_required(VERSION 2.14)
project(runTests)
set(DESTINATION_DIR ${PROJECT_BINARY_DIR}/Debug)
execute_process( COMMAND ${CMAKE_COMMAND} -E make_directory ${DESTINATION_DIR})
execute_process( COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/gtest/lib/gtest_main.dll ${DESTINATION_DIR})
execute_process( COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/gtest/lib/gtest.dll ${DESTINATION_DIR})
# Locate GTest
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
message("CMAKE_CURRENT_SOURCE_DIR:" ${CMAKE_CURRENT_SOURCE_DIR})
link_directories(${CMAKE_CURRENT_SOURCE_DIR}/gtest/lib)
# Link runTests with what we want to test and the GTest and pthread library
add_executable(${PROJECT_NAME} main.cpp)
target_link_libraries(${PROJECT_NAME}
gtest
gtest_main)
在 cmake 运行过程中,会把 exe 文件依赖的 googletest 库文件(.dll)拷贝到即将生成的 exe 文件的存放位置。
由于篇幅受限,本系列教程还未完结,下一篇《C++ 测试框架 GoogleTest 初学者入门篇 丙》将在本公众号稍后推送,如果你想看了解更多精彩内容,欢迎关注我的微信公众号 【ENG八戒】
学习可以等,时间不等人!
关注我,带你学习编程领域更多核心技能!

C++ 测试框架 GoogleTest 初学者入门篇 乙的更多相关文章
- Google C++测试框架系列:入门
Google C++测试框架系列:入门 原始链接:V1_6_Primer 注 GTest或者Google Test: Google的C++测试框架. Test Fixtures: 这个词实在找不到对应 ...
- Farseer.net轻量级ORM开源框架 V1.x 入门篇:视图的数据操作
导航 目 录:Farseer.net轻量级ORM开源框架 目录 上一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:视图实体类映射 下一篇:Farseer.net轻量级ORM开源 ...
- Farseer.net轻量级ORM开源框架 V1.x 入门篇:存储过程数据操作
导航 目 录:Farseer.net轻量级ORM开源框架 目录 上一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:存储过程实体类映射 下一篇:Farseer.net轻量级ORM ...
- Farseer.net轻量级ORM开源框架 V1.x 入门篇:存储过程实体类映射
导航 目 录:Farseer.net轻量级ORM开源框架 目录 上一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:视图的数据操作 下一篇:Farseer.net轻量级ORM开源 ...
- Farseer.net轻量级ORM开源框架 V1.x 入门篇:视图实体类映射
导航 目 录:Farseer.net轻量级ORM开源框架 目录 上一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:表的数据操作 下一篇:Farseer.net轻量级ORM开源框 ...
- Farseer.net轻量级ORM开源框架 V1.x 入门篇:数据库上下文
导航 目 录:Farseer.net轻量级ORM开源框架 目录 上一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:数据库配置文件 下一篇:Farseer.net轻量级ORM开源 ...
- Farseer.net轻量级ORM开源框架 V1.x 入门篇:表的数据操作
导航 目 录:Farseer.net轻量级ORM开源框架 目录 上一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:表实体类映射 下一篇:Farseer.net轻量级ORM开源框 ...
- Farseer.net轻量级ORM开源框架 V1.x 入门篇:表实体类映射
导航 目 录:Farseer.net轻量级ORM开源框架 目录 上一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:数据库上下文 下一篇:Farseer.net轻量级ORM开源框 ...
- Farseer.net轻量级ORM开源框架 V1.x 入门篇:数据库配置文件
导航 目 录:Farseer.net轻量级ORM开源框架 目录 上一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:新版本说明 下一篇:Farseer.net轻量级ORM开源框架 ...
- Farseer.net轻量级ORM开源框架 V1.x 入门篇:新版本说明
导航 目 录:Farseer.net轻量级ORM开源框架 目录 上一篇:没有了 下一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:数据库配置 前言 V1.x版本终于到来了.本次 ...
随机推荐
- Git简介及使用
1.Git简介 GIT= 版本控制 + 备份服务器 我们称用来存放上传档案的地方就做Repository.用中文来说,有点像是档案仓库的意思. 不过,通常我们还是使用Repository这个名词.当有 ...
- testNG框架之我见
testNG框架中会有一个xml文件夹,里面放xml文件,之后必须要在pom文件中配置 xml文件中有一个suite,在suite中可以配置parameter参数.test用例,还可以添加listen ...
- 第12组 Beta冲刺 (4/5)
1.1基本情况 ·队名:美少女战士 ·组长博客:https://www.cnblogs.com/yaningscnblogs/p/14016973.html ·作业博客:https://edu.cnb ...
- Qt滚动条样式
Qt手动设置滚动条的qss样式 QScrollBar:vertical { width: 14px; margin: 16px 0 16px 0; background: #eaeaea; } QSc ...
- SpringBoot为什么是默认单例的:
好处: 1)提升性能,减少了新生成实例的消耗 新生成实例消耗包括两方面,第一,spring会通过反射或者cglib来生成bean实例, 其次,给对象分配内存也会涉及复杂算法,这些都是消耗性能的操作. ...
- 记安装MySQL数据库
记录一次自己动手安装MySQL数据库所踩的坑 MySQL安装包与操作系统匹配 安装包有amd和Intel,32位.64位多种组合需要确认仔细使用者操作系统和CPU型号 例如我使用的是CentOS ...
- Docker部署Reids单机
一.Redis镜像拉取 docker pull redis 指定版本 docker pull redis:5.0.8 二.Redis单实例安装 1.创建容器挂在目录 (-p 递归创建目录,上级目录不存 ...
- 中国移动光猫(吉比特h2-3S)超级用户名与密码
超级用户名 CMCCAdmin 密码 aDm8H%MdA
- FastDFS安装(ARM同样支持)
一.服务器部署规划 服务器IP 部署服务 192.168.*. tracker.storage.nginx 二.数据存储目录 应用 目录 fastdfs /usr/bin nginx /usr/loc ...
- .NET实验二
实验名称:实验二 面向对象程序设计 一. 实验目的 1. 理解类的定义.继承等面向对象的的基本概念: 2. 掌握 C#语言定义类及其各种成员(字段,属性,方法)的方法: 3. 掌握方法覆盖的应用: 4 ...