GoogleTest做单元测试
目录
- 环境准备
- GoogleTest
环境准备
git clone https://github.com/google/googletest.git
说cmkae版本过低了,解决方法
进到googletest中
cmake CMakeLists.txt
make
sudo make install
ls /usr/local/lib
存在以下文件说明安装成功
中间出了个问题就是,总是出现链接不成功,导致库导入不进去
可以对G++命令加上-L编译的命令,这样就指定了库的搜索路径。
g++ sample1.cc sample1_unittest.cc -o sample1 -L/usr/local/lib -lgtest -lgtest_main -lpthread
GoogleTest
单元测试是用来对一个模块、一个函数或者一个类来进行正确性检测的测试工作。
比如我们测试一个岛问题的解决方法
#include <iostream>
#include <initializer_list>
#include <vector>
#include <gtest/gtest.h>using namespace std;class IslandProblem {
public:using Matrix = vector<vector<char>>;IslandProblem(const initializer_list<vector<char>> list) {_islands.assign(list);}int Do() {int num = 0;for (int row = 0; row < (int)_islands.size(); row++) {for (int col = 0; col < (int)_islands[row].size(); col++) {if (canUnion(row, col)) {num++;unionIsland(row, col);}}}return num;}protected:bool canUnion(int row, int col) {if (row < 0 || row >= (int)_islands.size())return false;if (col < 0 || col >= (int)_islands[row].size())return false;if (_islands[row][col] != 1)return false;return true;}void unionIsland(int row, int col) {_islands[row][col] = 2;// upif (canUnion(row-1, col)) unionIsland(row-1, col);// leftif (canUnion(row, col-1)) unionIsland(row, col-1);// downif (canUnion(row+1, col)) unionIsland(row+1, col);// rightif (canUnion(row, col+1)) unionIsland(row, col+1);}private:Matrix _islands;
};TEST(IslandProblem, logic) {IslandProblem ip1{{1,1,1,1},{1,0,1,1},{0,0,0,0},{1,0,1,0}};EXPECT_EQ(ip1.Do(), 3);IslandProblem ip2{{1,0,1,1},{1,0,1,1},{0,0,0,0},{1,0,1,0}};EXPECT_EQ(ip2.Do(), 4);
}TEST(IslandProblem, boundary) {IslandProblem ip1{{1,1,1,1},{1,0,0,1},{1,0,0,1},{1,1,1,1}};EXPECT_EQ(ip1.Do(), 1);IslandProblem ip2{};EXPECT_EQ(ip2.Do(), 0);
}TEST(IslandProblem, exception) {IslandProblem ip1{{-1,1,1,1},{1,0,0,1},{1,0,0,1},{1,1,1,1}};EXPECT_EQ(ip1.Do(), 1);
}
解决方法要考虑:逻辑问题(功能正确),边界问题,异常情况。TEST的测试案例中已经把这些问题考虑进去了。
然后实际去测试,说明解决方法能够考虑以上三种情况
相关文章:
GoogleTest做单元测试
目录 环境准备GoogleTest 环境准备 git clone https://github.com/google/googletest.git说cmkae版本过低了,解决方法 进到googletest中 cmake CMakeLists.txt make sudo make installls /usr/local/lib存在以下文件说明安装成功 中间出了个问题就是,…...
深入解析 EasyExcel 组件原理与应用
✨深入解析 EasyExcel 组件原理与应用✨ 官方:EasyExcel官方文档 - 基于Java的Excel处理工具 | Easy Excel 官网 在日常的 Java 开发工作中,处理 Excel 文件的导入导出是极为常见的需求。 今天,咱们就一起来深入了解一款非常实用的操作 Exce…...
JSON数据转化为Excel及数据处理分析
在现代数据处理中,JSON(JavaScript Object Notation)因其轻量级和易于人阅读的特点而被广泛使用。然而,有时我们需要将这些JSON数据转化为Excel格式以便于进一步的分析和处理。本文将介绍如何将JSON数据转化为Excel文件࿰…...
(计算机网络)期末
计算机网络概述 物理层 信源就是发送方 信宿就是接收方 串行通信--一次只发一个单位的数据(串行输入) 并行通信--一次可以传输多个单位的数据 光纤--利用光的反射进行传输 传输之前,要对信源进行一个编码,收到信息之后要进行一个…...
【AI技术赋能有限元分析应用实践】将FEniCS 软件安装在Ubuntu22.04
FEniCS 完整介绍 FEniCS 是一个开源的计算工具包,专门用于解决偏微分方程(PDE)的建模和求解。它以灵活的数学抽象和高效的计算性能著称,可以让用户使用高层次的数学表达来定义问题,而无需关注底层的数值实现细节。 具体来看,FEniCS 是一个开源的高性能计算工具包,用于…...
快速识别模型:simple_ocr,部署教程
快速识别图片中的英文、标点符号、数学符号、Emoji, 模型会输出图片中文字行的坐标位置、最低得分、识别结果。当前服务用到的模型:检测模型、数字识别、英文符号识别。 一、部署流程 1.更新基础环境 apt update2.安装miniconda wget https://repo.anaconda.com/…...
【C/C++】数据库链接入门教程:从零开始的详细指南!MySQL集成与操作
文章目录 环境配置:搭建开发环境的基础步骤2.1 安装MySQL数据库2.2 配置C/C开发环境2.3 下载并安装MySQL Connector/C 基础操作:实现C/C与MySQL的基本交互3.1 建立数据库连接3.2 执行SQL语句3.3 处理查询结果 进阶技巧:提升数据库操作效率与安…...
C#中面试的常见问题005
1、重载和重写 重载(Overloading) 重载是指在同一个类中定义多个同名方法,但参数列表不同(参数的数量、类型或顺序不同)。返回类型可以相同也可以不同。重载方法允许你根据传入的参数类型和数量来调用不同的方法。 …...
使用Redis生成全局唯一id
为了生成一个符合要求的分布式全局ID,我们可以使用 StringRedisTemplate 来实现。这个ID由三部分组成: 符号位(1 bit):始终为0,表示正数。时间戳(31 bit):表示从某个起始…...
pnpm:包管理的新星,平替 npm 和 yarn
pnpm,一个老牌的 node.js 包管理器,支持 npm 的所有功能,完全足以用来替代 npm。它采用全局存储,每个项目内部使用了硬链接,所以很省空间,安装速度快。 本文介绍下 pnpm 的基本概念,安装、…...
Android调起系统分享图片到其他应用
Android调起系统分享图片到其他应用 有时候分享不想接第三方的,其实如果你的分享要求不是很高,调系统的分享也是可以的。 一、思路: 用intent.action Intent.ACTION_SEND 二、效果图: 三、关键代码: //这个是分享…...
详解Qt QBuffer
文章目录 **QBuffer 的详解****前言****QBuffer 是什么?****QBuffer 的主要用途****构造函数****主要成员函数详解****1. open()****原型:****作用:****参数:****返回值:****示例代码:** **2. write()****原…...
Python基础学习-11函数参数
1、"值传递” 和“引用传递” 1)不可变的参数通过“值传递”。比如整数、字符串等 2)可变的参数通过“引用参数”。比如列表、字典。 3)避免可变参数的修改 4)内存模型简介 2、函数参数类型 1) def func() #无参…...
GTK#框架让C# Winform程序跨平台运行
在软件开发领域,跨平台能力是一个重要的考量因素。对于C#开发者来说,Winform是构建桌面应用的强大工具,但原生Winform只支持Windows平台。幸运的是,GTK#框架的出现让C# Winform程序跨平台运行成为可能。本文将详细介绍如何使用GTK…...
在Kubernetes使用CronJob实现定时删除指定天数外的文件(我这里使用删除备份mysql数据库文件为例)
文章目录 一、代码使用方式1、golang代码2、使用方法二、容器镜像使用方式1、制作镜像2、我公开的镜像3、使用方法一、代码使用方式 1、golang代码 vim cleanfile.go package mainimport ("flag""fmt""io/ioutil""os""path/fi…...
使用 Elastic 收集 Windows 遥测数据:ETW Filebeat 输入简介
作者:来自 Elastic Chema Martinez 在安全领域,能够使用 Windows 主机的系统遥测数据为监控、故障排除和保护 IT 环境开辟了新的可能性。意识到这一点,Elastic 推出了专注于 Windows 事件跟踪 (ETW) 的新功能 - 这是一种强大的 Windows 原生机…...
力扣-位运算-4【算法学习day.44】
前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向和记录学习过程(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非…...
Stable Diffusion 3详解
🌺系列文章推荐🌺 扩散模型系列文章正在持续的更新,更新节奏如下,先更新SD模型讲解,再更新相关的微调方法文章,敬请期待!!!(本文及其之前的文章均已更新&…...
c#异步编程(async/await)
注:下文摘自ChatGPT,总结与案例都非常完善,可以快速理解并应用 0:使用场景 在winform界面程序中,在ui操作中涉及到一些耗时的等待操作,使用线程自己处理已经显得力不从心,如何能更好的实现&am…...
TCP/IP学习笔记
TCP\IP从实际应用的五层结构开始,自顶而下的去分析每一层。 TCP/IP五层架构概述 学术上面是TCP/IP四层架构,OSI/ISO是七层架构,实际中使用的是TCP/IP五层架构。 数据链路层 ICMP数据包分析 Wireshark抓包分析ICMP协议_wireshark抓ping包分析…...
0000_vim自定义快捷键_alias
vim自定义快捷键_alias 如下: 1.直接打开vi ~/.bashrc 然后到最底部,添加alias快捷键 2.添加alias快捷键mgplat 以后只要发送mgplat就等于出发了那么长一条指令 3.保存退出即可 【注意】 操作完后,可能你用mgplat无法使用,可…...
Spring Boot项目中,实体类是否需要实现Serializable接口
在Spring Boot项目中,实体类是否需要实现Serializable接口并不是一个硬性规定,而是取决于具体的应用场景和需求。以下是对这一问题的更详细分析: 1. 序列化的基本概念 序列化是将对象的状态信息转换为可以存储或传输的形式的过程。反序列化则…...
打通工业通信壁垒实现Ethernetip转profinet网络互通
西门子S7-1500 PLC(profinet)与AB PLC 1769-L32E以太网通讯(EtherNet/IP)。今天与大家分享一篇Profinet转EtherNet/IP的通讯配置方案。本文主要介绍开疆智能的Profinet转EtherNet/IP网关KJ-PNG-208,连接西门子S7-1500 …...
数据结构_图的应用
最小生成树 Prim算法 int AMGraph::sum(string v) {int start, totalW, cnt, minW, u, vv, i, j;start LocateVex(v); // 获取起始顶点编号memset(visited, false, sizeof(visited)); // 初始化访问状态visited[start] true;totalW 0; // 最小生成树的总权重cnt 1; // 当前…...
C#中面试的常见问题002
1.wpf和Winfrom的区别 1. 技术基础 WPF:基于.NET Framework,使用XAML(可扩展应用程序标记语言)作为界面描述语言,支持矢量图形和高级布局。WinForms:基于.NET Framework,使用纯代码或拖放设计…...
快速理解微服务中Ribbon的概念
一.基本概念 1.在微服务架构中,Ribbon 是一个客户端负载均衡器,用于控制服务间的通信方式。 2.Ribbon 是一个开源的库,最早由 Netflix 开发,用于实现客户端负载均衡。 3.Ribbon 主要解决的是在微服务架构中,多个服务…...
K8S简介、使用教程
以下是关于 Kubernetes(通常缩写为 K8S)的简介和使用教程: 一、Kubernetes 简介 定义与作用 Kubernetes 是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。它最初由谷歌开发,后捐赠给云原生计算基…...
极狐GitLab 17.6 正式发布几十项与 DevSecOps 相关的功能【四】
GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料: 极狐GitLab 官网极狐…...
麦肯锡报告 | 科技落地的真谛:超越技术本身的价值创造
科技创新正在以惊人的速度改变企业运作和客户体验,但实现其潜力的关键在于正确的策略、流程、文化和人才。麦肯锡强调了一个理念:Never just tech(不仅仅是技术)。这表明,成功的数字化转型不仅依赖于技术,还…...
彻底解决 macOS 下Matplotlib 中文显示乱码问题
彻底解决 macOS 下Matplotlib 中文显示乱码问题 在使用 Python 的 Matplotlib 库进行数据可视化时,中文字符的显示常常会出现乱码问题,尤其在 macOS 系统上。在网上找了一大堆方法,花了很久,发现不是要安装各种字体就是要改配置&…...
网站建设与管理常用/百度网站下载安装
在Android开发中,事件分发机制是一块Android比较重要的知识体系,了解并熟悉整套的分发机制有助于更好的分析各种点击滑动失效问题,更好去扩展控件的事件功能和开发自定义控件,同时事件分发机制也是Android面试必问考点之一&#x…...
公司备案查询网站备案/单页网站怎么优化
一.分布式锁在单机场景下,可以使用语言的内置锁来实现进程同步。但是在分布式场景下,需要同步的进程可能位于不同的节点上,那么就需要使用分布式锁。阻塞锁通常使用互斥量来实现:互斥量为 0 表示有其它进程在使用锁,此…...
简约风格网站设计/广州网站运营专业乐云seo
question: 开平方用 sqrt(), 开三次方用什么啊? answer: 开立方也就是求 1/3 次方, 所以可以用pow()函数 example: #include <stdio.h> #include <math.h>int main() {double a pow(8, 1.0 / 3);printf("%f\n", a);return 0; }程序运行结…...
要加强县门户网站的建设管理办法/黑帽seo排名技术
程序员在为某个应用系统编写接入其它应用系统的程序代码的时候,常常为了用户认证大伤脑筋:1) 让最终用户频繁登录? 似乎是一个让用户很难接受的解决方案。2) 在代码中内置用户名和密码? 代码需要随用户和密码的变化经常维护,同时在很多场合…...
自己做网站和凡科的区别/青岛seo建站
名字 strstr, strcasestr - 在字符串中定位一个子串概要 #include <string.h>char *strstr(const char *haystack, const char *needle);char *strcasestr(const char *haystack, const char *needle); // 是GNU的扩展描述 strstr()函数在haysta…...
商城建设公司/百度seo公司电话
近期晶圆代工产能(特别是8吋产能)紧缺问题已经引发了整个半导体产业的普遍关注,因为其已经引发了下游众多的相关芯片的缺货、涨价问题,比如电源管理IC、面板驱动IC、CMOS图像传感器、部分功率器件及MCU缺货和涨价问题都非常严重,甚至部分车厂…...