*以下内容为自己的学习笔记,如需求转载,请声明原文链接 微信公众号「ENG八戒」mp.weixin.qq.com/s/aFeiOGO-N…

C++ 测试框架 GoogleTest 初学者入门篇 乙

开发者虽然首要负责工程里的开发使命,可是每个开发结束的功用都是需求开发者自测通过的,所以经常会听到开发者提起单元测验的论题。那么今天我就带大伙一起来看看大名鼎鼎的谷歌 C++ 测验框架 GoogleTest.

本文上接《C++ 测验框架 GoogleTest 初学者入门篇 甲》,欢迎关注微信公众号【ENG八戒】查看更多精彩内容。

C++ 测试框架 GoogleTest 初学者入门篇 乙


装置装备环境

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 下载,下面贴出我这边试验用的下载链接

codeload.github.com/google/goog…

下载之后解压到本地文件夹,进到这个本地文件夹,然后启动指令行终端 cmd,当前方位应该是这个本地文件夹,接着依照下面的指令去编译,默认输出静态的调试版别库文件(.lib)

mkdir build && cd build
cmake ..
cmake --build .

编译成功后,在目录 .\build\lib\Debug 下面多了许多生成文件,可是咱们只需求这两个静态库文件

gtest.lib
gtest_main.lib

那么,怎样输出动态的调试版别库文件(.lib)呢?

C++ 测试框架 GoogleTest 初学者入门篇 乙

依照上图修改保存,然后输入和上面相同的编译指令即可。

编译成功后,在目录 .\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

C++ 测试框架 GoogleTest 初学者入门篇 乙

把整个文件夹复制到方针测验工程 TEST 目录下,然后把 gtest 编译输出的静态库文件(.lib)也复制到方针测验工程 TEST 的 .\gtest\lib 目录下

C++ 测试框架 GoogleTest 初学者入门篇 乙

然后看一下 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 初学者入门篇 乙