C++单元测试工具——googletest

  在平常的学习和工作中,单元测试是很重要的一环,用于验证代码中最小的可测试单元(通常是函数或方法)是否按照预期工作,单元测试可以帮助开发人员验证代码的正确性和提高代码的可维护性,确保代码的稳定性和可靠性。

官网:https://github.com/google/googletest

1.googletest

  googletest是一个开源的C++测试框架,用于编写和运行单元测试。它是Google开发的一个基于xUnit风格的测试框架,旨在提供简单易用的测试工具和丰富的断言库,帮助开发者编写可靠的单元测试。

  googletest具有以下特点:

  • 简单易用:使用简单的宏和断言函数,可以轻松编写测试用例。
  • 支持多种测试风格:支持传统的测试风格和新的测试风格,如测试夹具(TestFixture)和参数化测试(Parameterized Test)。
  • 丰富的断言库:提供了丰富的断言函数,可以方便地进行测试结果的验证。
  • 支持测试套件和测试用例的管理:可以将多个测试用例组织成测试套件,方便管理和执行。
  • 支持测试结果的输出和报告:可以生成详细的测试结果报告,方便查看测试覆盖率和失败的测试用例。

使用googletest可以帮助开发者编写可靠的单元测试,提高代码的质量和可维护性,广泛应用于C++项目中,被认为是一个优秀的测试框架。

1.1 下载并安装googletest

$ git clone https://gitee.com/boss-dog/googletest.git
$ cd googletest
$ mkdir build
$ cd build
$ cmake -Dgtest_build_tests=on -DCMAKE_INSTALL_PREFIX=. ..
$ make -j`nproc` 
$ make install

官网使用文档说明:https://google.github.io/googletest/

2.使用googletest编写测试用例

在这里插入图片描述
CMakeLists.txt

cmake_minimum_required(VERSION 3.16)
project(MyDemo)# 设置C++标准
set(CMAKE_CXX_STANDARD 17)# 添加googletest库
add_subdirectory(googletest)# 添加可执行文件
add_executable(test_mathtest_math.cpprobot_math.cpp
)# 链接googletest库
target_link_libraries(test_math gtest_main)

robot_math.h

#ifndef ROBOT_MATH_H
#define ROBOT_MATH_Hint add(int a, int b);int sub(int a, int b);int multiply(int a, int b);int divide(int a, int b);#endif

robot_math.cpp

#include "robot_math.h"int add(int a, int b)
{return a + b;
}int sub(int a, int b)
{return a - b;
}int multiply(int a, int b)
{return a * b;
}int divide(int a, int b)
{return a / b;
}

test_math.cpp

#include <iostream>
#include "robot_math.h"#include <gtest/gtest.h>TEST(add, test)
{auto res = add(10, 5);std::cout << "add res: " << res << std::endl;
}TEST(sub, test)
{auto res = sub(10, 5);std::cout << "sub res: " << res << std::endl;
}TEST(multiply, test)
{auto res = multiply(10, 5);std::cout << "multiply res: " << res << std::endl;
}TEST(divide, test)
{auto res = divide(10, 5);std::cout << "divide res: " << res << std::endl;
}

运行结果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/703023.shtml

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

相关文章

综合服务 IntServ

目录 综合服务 IntServ IntServ 定义的两类服务 IntServ 的四个组成部分 流 (flow) 资源预留协议 RSVP RSVP 协议的工作原理 IntServ 体系结构在路由器中的实现 综合服务 IntServ 体系结构存在的主要问题 综合服务 IntServ 综合服务 IntServ (Integrated Services) 可…

力扣随笔删除有序数组中的重复项(简单26)

思路&#xff1a;根据类似于滑动窗口的思想&#xff0c;定义一个指针&#xff1b;使指针左边的区域全部为不重复元素&#xff08;包括指针所指的数字&#xff09; 以示例2为例&#xff0c;left&#xff1a;红色加粗 遍历指针i&#xff1a;黑色加粗 窗口范围&#xff0c;左边界到…

区分服务 DiffServ

目录 区分服务 DiffServ 区分服务的基本概念 区分服务 DiffServ 的要点 每跳行为 PHB DiffServ 定义的两种 PHB 区分服务 DiffServ 区分服务的基本概念 由于综合服务 IntServ 和资源预留协议 RSVP 都较复杂&#xff0c;很难在大规模的网络中实现&#xff0c;因此 IET…

基于Prony算法的系统参数辨识matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 Prony算法是一种用于信号处理和系统辨识的经典方法&#xff0c;特别适用于线性时不变系统&#xff08;LTI&#xff09;的频率响应分析以及模拟复指数信号序列。其…

golang通过http访问外部网址

不同项目之前,通过http访问,进行数据沟通 先设定一个接口,确认外部能访问到 PHP写一个接口 public function ceshi_return() {$data $this->request->param();$id $data[id];$res Db::name(user)->field(id,status,price,name)->where([id>$id])->find…

无人集群试验评估现状及技术方法综述

源自&#xff1a;系统工程与电子技术 作者&#xff1a;赵蕊蕊, 于海跃, 游雅倩, 张涛, 陶敏, 姜江 “人工智能技术与咨询” 发布 摘 要 试验评估是促进装备系统作战能力生成和实战化应用的重要手段。无人集群依靠自组网实现复杂交互, 具备典型的智能性和涌现性, 开展无人集…

深度学习在过冷沸腾气泡动力学分割中的应用

Application of deep learning for segmentation of bubble dynamics in subcooled boiling 深度学习在过冷沸腾气泡动力学分割中的应用 期刊信息&#xff1a;International Journal of Multiphase Flow 2023 级别&#xff1a;EI检索 SCI升级版工程技术2区 SCI基础版工程技术3区…

Flask基础学习4

19-【实战】问答平台项目结构搭建_剪_哔哩哔哩_bilibili 参考如上大佬的视频教程&#xff0c;本博客仅当学习笔记&#xff0c;侵权请联系删除 问答发布的web前端页面实现 register.html {% extends base.html %}{% block head %}<link rel"stylesheet" href&q…

VSCode远程开发 Windows11 Linux

问题背景 之前一直用JetBrains的Gateway和本地Linux虚拟机开发&#xff0c;不过笔记本配置不够&#xff0c;太卡了。最近租了个国外的便宜服务器&#xff0c;JetBrains的Gateway总断连&#xff0c;也不知道为什么&#xff0c;所以试试VSCode。 本地 Windows 11 &#xff0c;远…

matlab新能源汽车三自由度操纵稳定性分析及优化

1、内容简介 略 可以交流、咨询、答疑 55-新能源汽车三自由度操纵稳定性分析及优化 2、内容说明 略 摘 要 电动化是节能减排、寻求替代能源的最佳途径&#xff0c;已成为行业共识&#xff0c;论文基于江西科技学院桑塔纳轿车油改气项目&#xff0c;在拆除发动机、变速…

一键生成请求方法的工具 —— OpenAPI Typescript Codegen

文章目录 用法自定义请求参数的方法1&#xff09;使用代码生成器提供的全局参数修改对象2&#xff09;直接定义 axios 请求库的全局参数&#xff0c;比如&#xff1a;全局请求响应拦截器 报错解决 用法 首先下载axios npm install axios官网&#xff1a;https://github.com/f…

Linux运维- FTP服务器

FTP服务器的配置与管理 项目场景 学院教职工在日常工作中&#xff0c;经常需要传送一些文件和资料。可以使用移动存储设备转存再复制&#xff0c;或者通过共享文件的方式实现&#xff0c;但是两种方法都不是很简单、方便。相对于这两种方法&#xff0c;使用FTP传送文件和资料…

【电子通识】为什么单片机芯片上会有多组VDD电源?

在单片机芯片规格书中&#xff0c;我们经常能看到多个组VDD的设计&#xff0c;如下红框所示管脚都是VDD管脚。 为什么需要这样设计&#xff1f;只设置一个VDD管脚&#xff0c;把其他的VDD管脚让出来多做几个IO或是其他复用功能不好吗&#xff1f;接下来我们从单片机内部的电路结…

阿里云-系统盘-磁盘扩容

阿里云系统磁盘扩容 之前是测试环境磁盘用的默认的有 40G&#xff0c;后面升级到正式的 磁盘怕不够用打算升级到 100G&#xff0c; 系统镜像&#xff1a; Alibaba Cloud Linux 3.2104 LTS 64 位 磁盘 ESSD 40G 升级步骤&#xff1a; 扩容与创建快照 在阿里云后台首先去扩容…

域名系统与IP地址分配

域名 域名的概述 域名是一个逻辑的概念&#xff0c;它不反映主机的物理地点 域名结构 由于数字形式的IP地址难以记忆和理解&#xff0c;为此人们采用英文符号来表示IP地址&#xff0c;这就产生了域名&#xff0c;域名长度不超过255各字符&#xff0c;每一层域名长度不超过6…

旅游组团自驾游拼团系统 微信小程序python+java+node.js+php

随着社会的发展&#xff0c;旅游业已成为全球经济中发展势头最强劲和规模最大的产业之一。为方便驴友出行&#xff0c;寻找旅游伙伴&#xff0c;更好的规划旅游计划&#xff0c;开发一款自驾游拼团小程序&#xff0c;通过微信小程序发起自驾游拼团&#xff0c;吸收有车或无车驴…

爬虫入门五(Scrapy架构流程介绍、Scrapy目录结构、Scrapy爬取和解析、Settings相关配置、持久化方案)

文章目录 一、Scrapy架构流程介绍二、Scrapy目录结构三、Scrapy爬取和解析Scrapy的一些命令css解析xpath解析 四、Settings相关配置提高爬取效率基础配置增加爬虫的爬取效率 五、持久化方案 一、Scrapy架构流程介绍 Scrapy一个开源和协作的框架&#xff0c;其最初是为了页面抓取…

Kotlin:协程基础

点击查看&#xff1a;协程基础 中文文档 点击查看&#xff1a;协程基础 英文文档 第一个协程程序 import kotlinx.coroutines.*fun main(){GlobalScope.launch {delay(1000L)//delay 是一个特殊的 挂起函数 &#xff0c;它不会造成线程阻塞&#xff0c;但是会 挂起 协程&…

机器学习:SVM算法(Python)

一、核函数 kernel_func.py import numpy as npdef linear():"""线性核函数:return:"""def _linear(x_i, x_j):return np.dot(x_i, x_j)return _lineardef poly(degree3, coef01.0):"""多项式核函数:param degree: 阶次:param …

纯国产轻量化数字孪生:智慧城市、智慧工厂、智慧校园、智慧社区。。。

AMRT 3D数字孪生引擎介绍 AMRT3D引擎是一款融合了眸瑞科技的AMRT格式与轻量化处理技术为基础&#xff0c;以降本增效为目标&#xff0c;支持多端发布的一站式纯国产自研的CS架构项目开发引擎。 引擎包括场景搭建、UI拼搭、零代码交互事件、光影特效组件、GIS/BIM组件、实时数据…