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

Google Mock 和 Google Test编写单元测试入门(环境配置、简单执行)

文章目录

  • 环境的配置
      • 方法1:从源代码构建
        • 第一步:克隆库的源代码
        • 第二步:构建库
      • 方法 2:使用 CMake 的 `FetchContent`
        • 示例 CMakeLists.txt
  • 项目的创建
      • 项目结构
      • CMakeLists.txt (根目录)
      • main.cpp (示例程序)
      • tests/CMakeLists.txt (测试部分)
      • tests/MyClassTest.cpp (示例测试)
      • 终端命令
      • 添加一个测试用例
      • 注意事项

环境的配置

Google Mock 和 Google Test环境配置

方法1:从源代码构建

第一步:克隆库的源代码

你可以使用 git 来克隆 gTest 和 gMock 的代码:

git clone https://github.com/google/googletest.git
第二步:构建库
  1. 进入 googletest 目录:

    cd googletest
    
  2. 创建构建目录并构建:

    mkdir build
    cd build
    cmake ..
    make
    
  3. 安装:

    如果你希望将库安装到系统目录,可以使用:

    sudo make install
    

要安装 Google Mock(gMock)和 Google Test(gTest)库,你可以通过几种方法进行,下面将介绍常用的两种方法:使用包管理器和从源代码构建。

方法 2:使用 CMake 的 FetchContent

如果不想手动安装库,可以在 CMake 项目的 CMakeLists.txt 中使用 FetchContent 来自动下载并构建 gTest 和 gMock。

示例 CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(MyGMockProject)set(CMAKE_CXX_STANDARD 11)include(FetchContent)# Fetch GoogleTest
FetchContent_Declare(googletestGIT_REPOSITORY https://github.com/google/googletest.gitGIT_TAG release-1.11.0  # 选择合适的版本
)FetchContent_MakeAvailable(googletest)# 添加源文件
set(SOURCE_FILES main.cpp MyClass.cpp)
set(TEST_FILES MyClassTest.cpp)# 创建可执行文件
add_executable(MyExecutable ${SOURCE_FILES})# 创建测试可执行文件
add_executable(MyTests ${TEST_FILES})# 链接 gMock 和 gTest
target_link_libraries(MyTests gmock gtest gmock_main gtest_main)

项目的创建

在 Visual Studio Code (VSCode) 中使用 Google Mock 和 Google Test 的完整流程如下:

项目结构

创建一个新的文件夹。然后在该文件夹中创建以下结构:

MyGTestProject/
├── CMakeLists.txt
├── main.cpp
└── tests/├── CMakeLists.txt└── MyClassTest.cpp

CMakeLists.txt (根目录)

MyGTestProject/CMakeLists.txt 中添加以下内容:
使用方法二配置环境

cmake_minimum_required(VERSION 3.10)
project(MyGTestProject)set(CMAKE_CXX_STANDARD 11)# Fetch Google Test
include(FetchContent)
FetchContent_Declare(googletestGIT_REPOSITORY https://github.com/google/googletest.gitGIT_TAG release-1.11.0  # 最后用于 1.11.0,或选择任意合适版本
)FetchContent_MakeAvailable(googletest)# 添加主程序文件
add_executable(MyExecutable main.cpp)# 添加测试子目录
add_subdirectory(tests)

main.cpp (示例程序)

MyGTestProject/main.cpp 中添加以下代码:

#include <iostream>int main() {std::cout << "Hello, Google Test!" << std::endl;return 0;
}

tests/CMakeLists.txt (测试部分)

MyGTestProject/tests/CMakeLists.txt 中添加以下内容:

# 添加测试源文件
set(TEST_FILES MyClassTest.cpp)# 创建测试可执行文件
add_executable(MyTests ${TEST_FILES})# 链接 GTest 和 GMock
target_link_libraries(MyTests gmock gtest gmock_main gtest_main)# 启用测试
enable_testing()
add_test(NAME MyTests COMMAND MyTests)

tests/MyClassTest.cpp (示例测试)

MyGTestProject/tests/MyClassTest.cpp 中添加以下测试代码:

#include <gmock/gmock.h>
#include <gtest/gtest.h>TEST(SampleTest, SampleAssertion) {ASSERT_EQ(1 + 1, 2);
}

终端命令

命令:

cd MyGTestProject
mkdir build
cd build
cmake ..
make
# 运行可执行文件
./MyExecutable
# 运行测试可执行文件
./tests/MyTests

添加一个测试用例

在源码中修改:

#include <gmock/gmock.h>
#include <gtest/gtest.h>TEST(SampleTest, SampleAssertion) {ASSERT_EQ(1 + 1, 2);
}TEST(SampleTest, SampleAssertion1) {ASSERT_EQ(1 + 1, 2);
}

注意TEST中两个参数不能全部都相同,会报错。

TEST()参数从一般到具体。
第一个参数是测试套件(test suite)的名称;
第二个参数是测试套件(test suite)中的测试名称;
这两个名称都必须是有效的C++标识符,并且不应包含任何下划线(_)。

测试的全名由其包含的测试套件及其测试名称组成。来自不同的测试套件的测试可以具有相同的测试名称。

运行结果:

在这里插入图片描述

注意事项

  1. 确保编译器和 CMake 版本兼容
  2. 如果遇到问题,可以查看 VSCode 的输出窗口,了解 CMake 和构建的详细信息。
  3. 可以添加更多的测试文件,只需在 tests/CMakeLists.txt 中添加这些文件的名称。
http://www.lryc.cn/news/421470.html

相关文章:

  • shell外壳与Linux权限
  • 越混越好的项目经理做对了哪些事?现在知道还不晚
  • haproxy是什么?以及haproxy基础实验
  • 【向量数据库】向量数据库的构建和检索
  • Mysql基础篇之DQL语言
  • python async
  • 利用QT和FFmpeg实现一个简单的视频播放器
  • 怎么用云手机进行TikTok矩阵运营
  • TCP/IP 协议及其协议号
  • 【传知代码】机器情绪及抑郁症算法 四(论文复现)
  • C#开启和关闭UAC功能
  • LVS的简单配置及对Mysql主从复制的补充
  • 七夕情人节特辑:程序员的浪漫惊喜,9个表白源码,甜蜜编程陪你过节
  • Mask-Rcnn
  • Python图像背景去除
  • 【C语言篇】C语言常考及易错题整理DAY1
  • MySQL5.7之源码安装
  • 【Linux学习 | 第3篇】Linux系统安装 jdk+Tomcat+MySQL+lrzsz
  • python语言day5 MD5 json
  • 【Python学习手册(第四版)】学习笔记19-函数的高级话题
  • Selenium + Python 自动化测试11(unittest组织用例)
  • 【唐氏题目 nt题】与众不同
  • 2000块的活嫌低?这个 6 位数的项目,你可不能错过哟!
  • 【Postman工具】
  • 全网超详细攻略-从入门到精通haproxy七层代理
  • AI编程辅助工具:CodeGeeX 插件使用
  • sql注入实战——thinkPHP
  • MySQL 迁移 OceanBase 的 Oracle模式中,实现自增主键的方法
  • 【C++ 面试 - 基础题】每日 3 题(十一)
  • ESP8266在线升级OTA固件