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

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.lryc.cn/news/603877.html

相关文章:

  • 三、Linux用户与权限管理详解
  • 【目标检测】小样本度量学习
  • 量子计算革命:重新定义计算的边界与未来
  • DNS污染与劫持
  • Python爬虫02_Requests实战网页采集器
  • MoR vs MoE架构对比:更少参数、更快推理的大模型新选择
  • Ubuntu20.04子系统
  • Oracle发布MCP Server,自然语言交互说“人话”
  • AUTOSAR Mcal Gpt - 模块介绍
  • LeetCode|Day29|1009. 十进制整数的反码|Python刷题笔记
  • Jenkins 详解
  • Java 大视界 -- Java 大数据机器学习模型在金融信用评级模型优化与信用风险动态管理中的应用(371)
  • 当贝纯净版_海信ip811n海思mv320处理器安卓4.42及9.0主板优盘免拆刷机固件及教程
  • 符号计算与算法实践|使用Maple教授​​群论​​和​​图论​​课程
  • JSON解析(day20)
  • 【CF】Day114——杂题 (贪心 + 图论 | LCM + 贪心 | 最大最小子序列 + 图论)
  • 如何创建一个 Solana 钱包?
  • imx6ull-驱动开发篇3——字符设备驱动开发实验
  • C 语言第 12 天学习笔记:函数进阶应用与变量特性解析
  • 每日学习笔记记录(分享更新版-凌乱)
  • imx6ull-驱动开发篇2——字符设备驱动开发步骤
  • 网络通信基础(一)
  • Redis 跨主机连接超时分析:从网络波动到架构优化
  • 使用鼠标在Canvas上绘制矩形
  • 【C++算法】80.BFS解决FloodFill算法_岛屿数量
  • 《Java 程序设计》第 9 章 - 内部类、枚举和注解
  • 实在智能Agent智能体荣登全球“Go_Global_AI_100”百强榜,中国AI走向世界!
  • STM32——HAL库
  • 什么是EasyVR shield 3?如何设置EasyVR shield 3
  • 大模型应用开发模拟面试