当前位置: 首页 > web >正文

gTest测试框架的安装与配置

目录

1.准备工作

2.在 Linux/macOS 上安装

3.在 Windows 上安装(使用 MSVC)

4.项目配置(以 CMake 为例)

5.常见问题与解决方案

6.总结


1.准备工作

1.依赖工具

  • 编译器:支持 C++11 及以上标准的编译器(GCC 4.8+、Clang 3.5+、MSVC 2015+)
  • 构建工具:CMake 3.5+(推荐)或 Make(Linux/macOS)
  • 版本控制工具:Git(用于获取源码)

2.获取源码

gMock 已整合到 Google Test 仓库中,无需单独下载,克隆仓库即可:

git clone https://github.com/google/googletest.git
cd googletest

下载的目录如下:

2.在 Linux/macOS 上安装

1.编译源码

# 创建构建目录
mkdir build && cd build# 生成 Makefile(默认安装到 /usr/local)
cmake .. \-DCMAKE_BUILD_TYPE=Release \  #  Release 模式(优化编译)-DBUILD_GMOCK=ON \           # 启用 gMock(默认已启用)-DINSTALL_GTEST=ON           # 允许安装 GTest/gMock# 编译(-j 选项指定并行编译线程数,加速编译)
make -j$(nproc)

2.安装到系统目录

# 安装(需要管理员权限)
sudo make install# 安装后文件位置:
# - 头文件:/usr/local/include/gtest/、/usr/local/include/gmock/
# - 库文件:/usr/local/lib/libgtest.a、/usr/local/lib/libgmock.a 等

3.在 Windows 上安装(使用 MSVC)

1.编译源码

# 创建构建目录
mkdir build && cd build# 生成 Visual Studio 解决方案(以 VS2022 为例)
cmake .. \-G "Visual Studio 17 2022" \  # 指定 VS 版本-A x64 \                     # 目标架构(x64 或 Win32)-DBUILD_GMOCK=ON \-DINSTALL_GTEST=ON//方法1
cmake --build . --config Release//或//方法2
# 用 MSBuild 编译(或打开生成的 .sln 文件在 VS 中编译)
msbuild googletest-distribution.sln /p:Configuration=Release /m

如果是用msbuild编译,以我的电脑为例,我自己的电脑安装的是VS2022,msbuild.exe的路径是(用Everything搜索):

2.安装到系统目录

# 安装(以管理员身份运行)
msbuild INSTALL.vcxproj /p:Configuration=Release# 安装后文件位置:
# - 头文件:C:\Program Files (x86)\googletest-distribution\include\
# - 库文件:C:\Program Files (x86)\googletest-distribution\lib\

这个地方用msbuild命令一定以管理员身份运行,我亲自试过,如果不是以管理员身份运行就会报错。以下是以管理员运行msbuild安装gTest的步骤:

1)以管理员运行cmd,并切换到msbuild的目录

2)执行安装指令

3)安装完成,在下列目录就有这些文件

4.项目配置(以 CMake 为例)

在自己的 C++ 项目中使用 gMock,需通过 CMake 配置链接。

1.创建示例项目结构

my_project/
├── CMakeLists.txt  # 项目配置文件
└── test.cpp        # 测试代码

2.编写 CMakeLists.txt

cmake_minimum_required(VERSION 3.5)
project(my_gmock_test)# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)# 查找 GTest 和 gMock
find_package(GTest REQUIRED)
find_package(GMock REQUIRED)# 添加测试可执行文件
add_executable(my_test test.cpp)# 链接 gMock、GTest 和线程库(Linux 需链接 pthread)
target_link_libraries(my_testGTest::gtestGTest::gmockGTest::gmock_main  # 提供默认 main 函数,可省略自行实现
)# 如果是 Linux/macOS,需额外链接 pthread
if(CMAKE_SYSTEM_NAME MATCHES "Linux|Darwin")target_link_libraries(my_test pthread)
endif()

3.编写测试代码(test.cpp)

#include <gmock/gmock.h>
#include <gtest/gtest.h>// 示例接口
class MyInterface {
public:virtual int add(int a, int b) = 0;virtual ~MyInterface() = default;
};// 模拟类
class MockMyInterface : public MyInterface {
public:MOCK_METHOD(int, add, (int a, int b), (override));
};// 测试用例
TEST(MyInterfaceTest, AddTest) {MockMyInterface mock;EXPECT_CALL(mock, add(2, 3)).WillOnce(testing::Return(5));EXPECT_EQ(mock.add(2, 3), 5);
}// 若未链接 gmock_main,需手动实现 main 函数
// int main(int argc, char **argv) {
//     testing::InitGoogleTest(&argc, argv);
//     return RUN_ALL_TESTS();
// }

4.编译并运行测试

# 构建项目
mkdir build && cd build
cmake ..
make  # 或在 Windows 上用 msbuild# 运行测试
./my_test  # Linux/macOS
# 或 my_test.exe  # Windows

5.常见问题与解决方案

1.找不到 GTest/gMock 库

  • 确保安装路径已添加到系统环境变量(如 LD_LIBRARY_PATH 或 PATH)。
  • 若未全局安装,可在 CMake 中指定路径:
set(GTEST_ROOT "/path/to/googletest/install")
set(GMOCK_ROOT "/path/to/googlemock/install")

2.链接错误(如 undefined reference to testing::Mock...

  • 检查是否遗漏链接 gmock 库(target_link_libraries 需包含 GTest::gmock)。
  • Linux 系统需确保链接 pthread 库。

3.编译器版本不兼容

  • 升级编译器至支持 C++11 及以上的版本(如 GCC 4.8+)。

6.总结

gTest 的安装和配置主要分为两步:

  1. 编译并安装 GTest/gMock 源码到系统或指定目录;
  2. 在项目中通过 CMake 链接 gTest/gMock 库,并编写测试代码。

通过这种方式,即可在 C++ 项目中使用 gMock 创建模拟对象,隔离外部依赖,高效编写单元测试。

http://www.xdnf.cn/news/16699.html

相关文章:

  • Qt 并行计算框架与应用
  • 项目优化中对象的隐式共享
  • 从单机架构到分布式:Redis为何成为架构升级的关键一环?
  • 【开源项目】轻量加速利器 HubProxy 自建 Docker、GitHub 下载加速服务
  • Less Less基础
  • Docker学习相关视频笔记(二)
  • 负载均衡、算法/策略
  • ROUGE-WE:词向量化革新的文本生成评估框架
  • Java 9 新特性解析
  • 考古学家 - 华为OD统一考试(JavaScript 题解)
  • 算法第29天|动态规划dp2:不同路径、不同路径Ⅱ、整数拆分、不同的二叉搜索树
  • uipath数据写入excel的坑
  • Python 程序设计讲义(25):循环结构——嵌套循环
  • 《Spring Cloud Gateway 深度剖析:从核心原理到企业级实战》
  • WAIC 2025观察:昇腾助力AI融入多元化生活场景
  • 理解Transformer解码器
  • Github 连接救星,完全合规合法,无风险!
  • 操作系统-lecture2(操作系统结构)
  • 微服务 01
  • Objective-c 初阶——异常处理(try-catch)
  • Typecho handsome新增评论区QQ,抖音,b站等表情包
  • 用FunASR轻松实现音频转SRT字幕:完整脚本与解析
  • iOS仿写 —— 计算器
  • Python 程序设计讲义(28):字符串的用法——格式化字符串
  • [leetcode] 组合总和
  • 冒泡排序算法
  • Java中什么是类加载?类加载的过程?
  • bash变量名不能有连字符
  • 【Redis实现基础的分布式锁及Lua脚本说明】
  • 爬虫逆向之瑞数五案例:某某医学院(补环境,联调)