当前位置: 首页 > 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.dtcms.com/a/304287.html

相关文章:

  • HammerDB:一款免费开源的数据库基准测试工具
  • YOLOv11.pt 模型转换为 TFLite 和 NCNN 模型
  • PDF转Word免费工具!批量处理PDF压缩,合并, OCR识别, 去水印, 签名等全功能详解
  • CodeRush AI 助手进驻 Visual Studio:AiGen/AiFind 亮相(三)
  • Visual Studio的妙用
  • [极客大挑战 2019]FinalSQL
  • 如何查询并访问路由器的默认网关(IP地址)?
  • 大规模矩阵构建与高级算法应用
  • Unity 编辑器开发 之 Excel导表工具
  • Python爬虫01_Requests第一血获取响应数据
  • 香橙派One安装OctoPrint 实现控制3D打印机
  • WebRTC 2025全解析:从技术原理到商业落地
  • 容器技术原理(一):从根本上认识容器镜像
  • Linux boot 目录损坏如何修复:从救援模式到系统恢复
  • APK重打包流程
  • K8s集群两者不同的对外暴露服务的方式
  • 如何迁移gitlab到另一台服务器
  • Makefile 快速入门指南
  • LangChain和LangGraph 里面的 `create_react_agent`有什么不同
  • 机器学习—逻辑回归
  • VitePress学习-自定义主题
  • 使用 Django REST Framework 构建强大的 API
  • 在依赖关系正确的情况下,执行 mvn install 提示找不到软件包
  • Python Day17 面向对象 及例题分析
  • Apache Ignite 的分布式队列(IgniteQueue)和分布式集合(IgniteSet)的介绍
  • 集成电路学习:什么是Wi-Fi无线保真度
  • 机器学习sklearn:泰坦尼克幸存预测(决策树、网格搜索找最佳参数)
  • 永磁同步电机无速度算法--静态补偿电压模型Harnefors观测器
  • 泛微E9 引入高版本spring导致webservices接口报错
  • vue2 使用liveplayer加载视频