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.rhkb.cn/news/395003.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring-Kafka确认机制报错:No Acknowledgment available as an argument

问题出现 在spring boot集成kafka时报错&#xff0c;报错信息&#xff1a; No Acknowledgment available as an argument, the listener container must have a MANUAL AckMode to populate the Acknowledgment.翻译&#xff1a; Acknowledgment 参数不可用&#xff0c;监听…

本地部署MySQL图形化管理工具phpMyAdmin结合内网穿透远程访问

文章目录 前言1. 安装MySQL2. 安装phpMyAdmin3. 修改User表4. 本地测试连接MySQL5. 安装cpolar内网穿透6. 配置MySQL公网访问地址7. 配置MySQL固定公网地址8. 配置phpMyAdmin公网地址9. 配置phpmyadmin固定公网地址 前言 本文主要介绍如何在群晖NAS安装MySQL与数据库管理软件p…

TCP 通信全流程分析:从连接建立到数据传输的深度探索

目录 一、TCP报头 二、三次握手 三、数据传输 四、四次挥手 本文通过一次TCP通信过程的分析来学习TCP协议 一、TCP报头 如图是一份TCP报文的报头&#xff0c;标准报头是20个字节&#xff0c;还可带有选项报头&#xff0c;也就是TCP报头的最小长度是20字节。以下是对报头的各…

千里江山图,自动化成诗:Expect脚本详解——从入门到进阶的自动化利器

目录 引言 Expect脚本基础 什么是Expect 基本语法 进阶应用 错误处理 正则表达式 并发处理 使用Shell脚本管理多个Expect脚本 在Expect脚本内部模拟并发 脚本复用与模块化 总结 引言 在自动化运维和测试领域&#xff0c;Expect脚本无疑是一把强大的利器。它以其灵…

鸿蒙Image组件设置长按手势回调事件

Image组件默认是可拖拽的&#xff0c;给Image组件设置draggable为false&#xff0c;即可成功触发长按事件:

基于Hadoop的北京市二手房价数据分析与可视化

文章目录 有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主项目介绍总结每文 有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主 项目介绍 随着中国经济的快速发展和城市化进程的加速&#xff0c;房地产市场已成为国民经…

难题:反转链表

定义一个函数&#xff0c;输入一个链表的头结点&#xff0c;反转该链表并输出反转后链表的头结点。 思考题&#xff1a; 请同时实现迭代版本和递归版本。 数据范围 链表长度 [0,30]。 样例 输入:1->2->3->4->5->NULL输出:5->4->3->2->1->N…

sgetrf M N is 103040 时报错,这是个bug么 lapack and Openblas the same,修复备忘

1,现象 MN103040时&#xff0c;调用 sgetrf_ 时&#xff0c;无论是 LAPACK 还是 OpenBLAS&#xff0c;都出错&#xff1a; openblas&#xff1a; lapack&#xff1a; 2, 复现代码 出现问题的应该是由于M和N相对数字太大&#xff0c;乘积超出32bit整数的表达范围&#xff0c;…

vulnhub靶机tomato记录

https://www.vulnhub.com/entry/tomato-1,557/ 过程 用nmap对目标主机做全端口扫描&#xff0c;dirb做目录扫描&#xff0c;结果如下&#xff1a; 8888端口开放一个web服务&#xff0c;存在Basic认证&#xff0c;试了爆破无果&#xff0c;sun-answerbook是一个在线文档系统&am…

门店收银系统源码+同城即时零售多商户入驻商城源码

一、我们为什么要开发这个系统&#xff1f; 1. 商户经营现状 “腰尾部”商户&#xff0c;无小程序运营能力&#xff1b;自营私域商城流量渠道单一&#xff1b;无法和线下收银台打通&#xff0c;库存不同步&#xff0c;商品不同步&#xff0c;订单不同步&#xff1b; 2.平台服…

MongoDB学习记录

1、初识Mongo 概述&#xff1a;与关系型数据库不同&#xff0c;MongoDB 的数据以类似于 JSON 格式的二进制文档存储&#xff0c;通常称这种格式为Bson&#xff0c;Bson不仅支持JSON中已有的数据类型&#xff0c;还增加了一些额外的数据类型&#xff0c;例如日期和二进制数据&a…

python爬虫学习记录-请求模块urllib3

&#xff08;文章内容仅作学习交流使用&#xff09; urllib3是一个功能强大、条理清晰&#xff0c;用于HTTP客户端的第三方模块 urllib3-发送网络请求 使用urllib3发送网络请求时&#xff0c;需要先创建PoolManager对象&#xff0c;并使用该对象的request方法发送请求&#…

[Spring] Spring AOP

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…

Qt实现类似淘宝商品看板的界面,带有循环翻页以及点击某页跳转的功能

效果如下&#xff1a; #ifndef ModelDashboardGroup_h__ #define ModelDashboardGroup_h__#include <QGridLayout> #include <QLabel> #include <QPushButton> #include <QWidget>#include <QLabel> #include <QWidget> #include <QMou…

扩展【从0制作自己的ros导航小车】C++_ROS_QT5联合编译,简单界面为ROS开发增添交互

从0制作自己的ros导航小车 前言一、环境搭建二、联合编译三、测试 前言 前面已经实现了导航功能&#xff0c;对于之后的一些开发&#xff0c;有交互能力是比较重要的&#xff0c;比如小车上连接一块屏幕&#xff0c;通过屏幕来选择模式&#xff0c;可视化等等。QT是不错的选择…

LVS是什么?以及LVS-NAT以及DR模式实验

目录 NAT LVS LVS集群的类型&#xff1a; LVS-NAT模式实验 环境准备&#xff1a; 实验步骤&#xff1a; LVS-DR模式实验 题目&#xff1a; 环境准备&#xff1a; 实验步骤&#xff1a; LVS-防火墙标签解决轮询调度问题 环境准备&#xff1a; 实验步骤&#xff1…

智界S7 小鹏P7 G3 G3i P5 G9 P7i G6 X9维修手册和电路图线路图接线资料更新

汽修帮手资料库提供各大厂家车型维修手册、电路图、新车特征、车身钣金维修数据、全车拆装、扭力、发动机大修、发动机正时、保养、电路图、针脚定义、模块传感器、保险丝盒图解对照表位置等&#xff0c;并长期保持高频率资料更新&#xff01; 覆盖车型2020-2024年智界S7 小鹏…

在VScode中导入conda环境的记录【原创】

今天在vscode编辑器中运行一个python代码&#xff0c;发现终端可以运行&#xff0c;但是编辑器中点击Run会显示缺包&#xff0c;但是python包明明是有的&#xff0c;在自己的conda环境中。后来发现&#xff0c;是vscode没有发现我自己创建的conda环境&#xff0c;在vscode中导入…

51单片机个人学习笔记16(红外遥控)

前言 本篇文章属于STC89C52单片机&#xff08;以下简称单片机&#xff09;的学习笔记&#xff0c;来源于B站教学视频。下面是这位up主的视频链接。本文为个人学习笔记&#xff0c;只能做参考&#xff0c;细节方面建议观看视频&#xff0c;肯定受益匪浅。 [1-1] 课程简介_哔哩…

Java封装原生ES

文章目录 &#x1f31e; Sun Frame&#xff1a;SpringBoot 的轻量级开发框架&#xff08;个人开源项目推荐&#xff09;&#x1f31f; 亮点功能&#x1f4e6; spring cloud模块概览常用工具 &#x1f517; 更多信息1.spring-data-es操作ES1.引入依赖2.application.yml配置uris3…