当前位置: 首页 > 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 中添加这些文件的名称。

相关文章:

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

文章目录 环境的配置方法1&#xff1a;从源代码构建第一步&#xff1a;克隆库的源代码第二步&#xff1a;构建库 方法 2&#xff1a;使用 CMake 的 FetchContent示例 CMakeLists.txt 项目的创建项目结构CMakeLists.txt (根目录)main.cpp (示例程序)tests/CMakeLists.txt (测试部…...

shell外壳与Linux权限

&#x1f308;个人主页&#xff1a;Yui_ &#x1f308;Linux专栏&#xff1a;Linux &#x1f308;C语言笔记专栏&#xff1a;C语言笔记 &#x1f308;数据结构专栏&#xff1a;数据结构 文章目录 1.shell命令以及运行原理2. Linux权限的概念3.Linux权限管理3.1 文件访问者的分类…...

越混越好的项目经理做对了哪些事?现在知道还不晚

作为一名项目经理&#xff0c;你最害怕的是什么&#xff1f; 是做不完的项目&#xff1f;延迟的进度条&#xff1f;还是团队人心涣散&#xff1f; 很多人都知道&#xff0c;得人心者得天下&#xff0c;一个成功的领导者&#xff0c;一定是能做到让人心服口服的。如果失去了团…...

haproxy是什么?以及haproxy基础实验

目录 一、什么是负载均衡&#xff1f; 二、为什么要用haproxy&#xff1f; 三、haproxy的基本部署实验&#xff1a; 3.1 基本配置实验 环境准备&#xff1a; 详细步骤&#xff1a; 3.2 haproxy-多进程与多线程实验&#xff1a; 多进程&#xff1a; 多线程&#xff1a;…...

【向量数据库】向量数据库的构建和检索

1、使用 sentence-transformers 将文本编码为向量 安装 sentence-transformers&#xff1a; pip install -U sentence-transformers在 huggingface 下载 all-MiniLM-L6-v2 模型权重&#xff08;1_Pooling 是文件夹&#xff0c;里面包含一个 config.json 文件&#xff09;&…...

Mysql基础篇之DQL语言

Mysql基础篇之DQL语言 1. 基础查询特点语法格式闲言碎语 2. 条件查询语法格式条件表达式逻辑表达式模糊查询 3. 排序查询4. 常见函数单行函数1. 字符函数2. 数学函数3. 日期函数4. 流程控制函数5. 其他函数 分组函数 5. 分组查询分组函数语法格式特点 6. 多表连接查询分类SQL 七…...

python async

要使用 Python 的 async 特性编写一个代码&#xff0c;以交替使用两个 AI API 处理数据&#xff0c;您可以按照以下步骤进行。假设这两个 AI API 的调用是异步的&#xff0c;并且我们需要在两个 API 之间轮流处理一组数据。 import asyncio import aiohttp async def call_ap…...

利用QT和FFmpeg实现一个简单的视频播放器

在当今的多媒体世界中&#xff0c;视频播放已成为不可或缺的一部分。从简单的媒体播放器到复杂的视频编辑软件&#xff0c;视频解码和显示技术无处不在。本示例使用Qt和FFmpeg构建一个简单的视频播放器。利用ffmpeg解码视频&#xff0c;通过QWidget渲染解码后的图像&#xff0c…...

怎么用云手机进行TikTok矩阵运营

TikTok作为炙手可热的社交媒体巨头&#xff0c;已经吸引了亿万用户的目光。随着科技的飞速发展&#xff0c;云手机的出现为TikTok矩阵运营注入了新的活力。本文将深入探讨云手机在TikTok矩阵运营中的实际应用&#xff0c;并分享一系列高效策略与技巧。 &#xff08;1&#xff0…...

TCP/IP 协议及其协议号

协议号十六进制协议号协议介绍10x1ICMP (Internet Control Message Protocol)20x2IGMP (Internet Group Management Protocol) 30x3GGP (Gateway-to-Gateway Protocol) 40x4IPv4 (encapsulation) 50x5ST (Stream Protocol) 60x6TCP (Transm…...

【传知代码】机器情绪及抑郁症算法 四(论文复现)

在现代心理健康研究中&#xff0c;抑郁症一直是一个备受关注的课题。随着科学的进步&#xff0c;研究人员逐渐认识到&#xff0c;抑郁症的成因远不止单一因素&#xff0c;而是由复杂的生物学、心理学和社会环境因素交织而成的。最近&#xff0c;MSA&#xff08;综合性综合性模型…...

C#开启和关闭UAC功能

在开发软件或制作安装包时&#xff0c;有时会需要管理员权限 &#xff0c;但是又不想弹出UAC对话框。 可以编写一个小工具&#xff0c;检测UAC是否关闭。如果没有关闭&#xff0c;就自动关闭UAC。 实现比较简单&#xff0c; 找到注册表 计算机\HKEY_LOCAL_MACHINE\SOFTWARE…...

LVS的简单配置及对Mysql主从复制的补充

Day 22 LVS的配置 环境准备 DSN() 用来解析各主机的域名和ip地址&#xff0c;配置域名解析huajuan&#xff0c;负责管理其他主机 web1--->web1.tangpin.huajuan web2--->web2.tangpin.huajuan dns--->dns.tangpin.huajuan web1(192.168.2.200) 用nginx…...

七夕情人节特辑:程序员的浪漫惊喜,9个表白源码,甜蜜编程陪你过节

大家好呀&#x1f44b;&#xff0c;今天是中国的七夕情人节&#xff0c;一个充满浪漫与爱的日子。为了庆祝这个特别的节日&#xff0c;我为大家精心准备了9个表白专用的前端小项目。这些项目涵盖了“我爱你”网站、爱情表白网站和心形动画等&#xff0c;通过HTML、CSS和一点点J…...

Mask-Rcnn

一 、FPN层 FPN层的基本作用 基本网络架构 基本思想 将多个阶段特征图融合在一起&#xff0c;这就相当于既有了高层的语义特征&#xff0c;也有了低层的轮廓特征 二、RPN层 三、ROI Align层...

Python图像背景去除

目录 &#x1f381;库的导入 &#x1f380;库的安装 &#x1f381;rembg库去除背景 &#x1f381;效果 &#x1f381;文末彩蛋 今天来介绍一个特别有趣的python库&#xff0c;rembg库&#xff0c;全称是“Remove Background”的缩写&#xff0c;意为“去除背景”&#xff…...

【C语言篇】C语言常考及易错题整理DAY1

文章目录 C语言常考及易错题整理选择题全局、局部和静态变量#define与typedef转义字符操作符循环其他 编程题计算日期到天数转换柯尼希定理旋转数组的最小数字描述错误的集合整数转换密码检查 C语言常考及易错题整理 选择题 全局、局部和静态变量 执行下面程序&#xff0c;正…...

MySQL5.7之源码安装

文章目录 下载编译&打包初始化数据目录启动服务器更改/设置root密码 下载 下载地址&#xff1a;https://downloads.mysql.com/archives/community/ 推荐下载 All Operating Systems (Generic) (Architecture Independent), Compressed TAR ArchiveIncludes Boost Headers …...

【Linux学习 | 第3篇】Linux系统安装 jdk+Tomcat+MySQL+lrzsz

文章目录 Linux—day31. 软件安装方式2. 安装jdk3. 安装Tomcat3.1 安装步骤&#xff1a;3.2 防火墙操作3.3 停止Tomcat服务的方式 4. 安装MySQL5. 安装lrzsz5.1 操作步骤 Linux—day3 Linux系统中软件安装 1. 软件安装方式 二进制发布包安装&#xff1a;软件已经针对具体平台…...

python语言day5 MD5 json

md5&#xff1a; python提供了内置的md5加密功能&#xff0c;使用md5模拟一个小项目&#xff1a; 注册&#xff1a; 启动py程序&#xff0c;在控制台界面提示用户输入用户名及密码&#xff1b; 使用md5加密 密码&#xff1b; 创建txt文件记录输入的用户名 和密文。 登录&…...

【Python学习手册(第四版)】学习笔记19-函数的高级话题

个人总结难免疏漏&#xff0c;请多包涵。更多内容请查看原文。本文以及学习笔记系列仅用于个人学习、研究交流。 本文主要介绍函数相关的高级概念&#xff1a;递归函数、函数注解、lambda表达式函数&#xff0c;常用函数工具如map、filter、reduce&#xff0c;以及通用的函数设…...

Selenium + Python 自动化测试11(unittest组织用例)

我们的目标是&#xff1a;按照这一套资料学习下来&#xff0c;大家可以独立完成自动化测试的任务。 上一篇我们讨论了unittest基本使用方法。 本篇文章我们接着讲。一些概念和一些常用的构造测试集的方法。 1、基本概念 1&#xff09;Test Case 一个Test Case的实例就是一个测…...

【唐氏题目 nt题】与众不同

# 与众不同 ## 题目描述 A是某公司的CEO&#xff0c;每个月都会有员工把公司的盈利数据送给A&#xff0c;A是个与众不同的怪人&#xff0c;A不注重盈利还是亏本&#xff0c;而是喜欢研究「完美序列」&#xff1a;一段连续的序列满足序列中的数互不相同。 A想知道区间[L,R]之…...

2000块的活嫌低?这个 6 位数的项目,你可不能错过哟!

2000块钱嫌低&#xff1f;这个6位数的项目&#xff0c;你可不能错过&#xff0c;关注有好礼。 最近写了一篇“接了一个2000块钱的活&#xff0c;大家看看值不值”的文章&#xff0c;发现流量和大家互动的热情出奇的高&#xff0c;可能是跟有钱有关的缘故&#xff0c;大家不是奔…...

【Postman工具】

一.接口扫盲 1.什么是接口&#xff1f; 接口是系统之间数据交互的通道。拿小红到沙县点餐为例&#xff1a;小红想吃鸭腿饭。她要用什么语言来表达&#xff1f;跟谁表达&#xff1f;通过什么表达&#xff1f;按照生活习惯应该是&#xff1a;小红根据菜单对服务员用中文表达她想要…...

全网超详细攻略-从入门到精通haproxy七层代理

目录 一.haproxy概述 1.1 haproxy简介 1.2 haproxy的主要特性 1.3 haproxy的优缺点 二.负载均衡介绍 2.1 什么是负载均衡 2.2 为什么用负载均衡 2.3 负载均衡类型 2.3.1 四层负载均衡 2.3.2 七层负载均衡 2.3.3 四层和七层的区别 三.haproxy的安装及服务 3.1 实验环…...

AI编程辅助工具:CodeGeeX 插件使用

CodeGeeX 插件使用 前言1.支持的平台2.安装步骤3.启用插件4.代码生成5.代码优化 前言 CodeGeeX 是一款基于 AI 技术的编程助手插件&#xff0c;旨在帮助开发者提高编程效率和代码质量。它能够智能生成代码、优化现有代码、自动生成文档以及回答编程相关的问题。无论您是初学者…...

sql注入实战——thinkPHP

sql注入实战——thinkPHP sql注入实战——thinkPHPthinkPHP前期环境搭建创建数据库开始寻找漏洞点输入SQL注入语句漏洞分析 实验错误 sql注入实战——thinkPHP thinkPHP前期环境搭建 下载thinkPHP文件 解压&#xff0c;将framework关键文件放到think-5.0.15中&#xff0c;改…...

MySQL 迁移 OceanBase 的 Oracle模式中,实现自增主键的方法

本文作者&#xff1a;赵黎明&#xff0c;爱可生 MySQL DBA 团队成员&#xff0c;熟练掌握Oracle、MySQL等数据库系统&#xff0c;擅长对数据库性能问题的诊断&#xff0c;以及事务与锁机制的分析等。负责解决客户在MySQL及爱可生自主研发的DMP平台日常运维中所遇到的各种问题&a…...

【C++ 面试 - 基础题】每日 3 题(十一)

✍个人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/fYaBd &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;收藏&…...