vscode通过插件一键运行 c++单元测试

news2025/2/27 14:11:39

gtest使用初探

简介: 本文在 ubuntu18.04 上实现了 googletest 的全局安装,并在一个 demo项目中演示了使用 cmake 引入了该库,实现了在命令行中运行 c++ 单元测试,包括运行单个 TEST 函数。另外通过 vscode 的插件 C++ TestMate, 实现了像 golang 那样的通过点击按钮即可运行单个测试,极大地方便了开发。

一、在命令行中使用googletest

a. 安装

补充文档 gtest详细安装教程

  1. 下载安装包,此命令只会下载源码到 /usr/src
    sudo apt-get install libgtest-dev
  2. 编译并拷贝
# 先去到 /usr/src/gtest 
$sudo cmake && sudo make
# 头文件会自动安装(/usr/include/gtest),但是库文件需要手动拷贝到系统搜索路径下
$sudo cp libgtest* /usr/lib/

b. 在项目中通过cmake引用

  1. 通过cmake 自带的 find_package 包管理命令来引入,以下 cmake文件是一部分,本质上生成 unit test的执行函数和普通的 c++ 可执行文件没有大的区别
find_package(GTest REQUIRED)
include_directories(${GTEST_INCLUDE_DIRS})
add_executable(runTests test/main_test.cpp)
target_link_libraries(runTests ${GTEST_BOTH_LIBRARIES} pthread)
install(TARGETS runTests)

find_package 会通过 /usr/share/cmake-3.25/Modules/FindGTest.cmake 这个文件来查找整个 GTest的库位置。 补充文档,关于 find_package 详细原理

c. 运行

执行完 cmake 和 make install 之后,去到 runTests 文件的安装路径

  • runTests --gtest_list_tests 列出所有的tests
  • runTests --gtest_filter=pico.test1 可以单独跑某个 test
    补充文档, googletest 详细教程

二、配合 vscode 插件一键运行UT

a. 安装和配置插件

在vscode 的插件搜索栏中搜索 googletest, 选择C++ TestMate 安装
配置,在 .vscode/setting中增加编译出来的可执行 test 文件的目录
补充文档 插件具体配置

# 配置成ut执行文件的路径,支持正则匹配
"testMate.cpp.test.advancedExecutables": [{"pattern":"${workspaceFolder}/cxx-lab/install/bin/*Tests"}],

避坑:在我的电脑上,普通的配置(test.executables + test.workingDirectory的模式)没有作用,只有 test.advancedExecutables 有作用,原因未知。

效果图
请添加图片描述

该插件,不仅可以运行 ut, 还可以进行 debug 操作,可以说是非常方便了

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

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

相关文章

MATLAB应用2——MATLAB串口采集加速度计数据

串口保存数据为txt格式: clc ; %死机的时候,在命令窗口输入return %getcominstrhwinfo (serial) %寻找串口 delete(instrfindall) %这句话必须有 global xx; global nn; global data1; global s; xx0; nn500; data1(1:nn)0; sserial(COM8); set(s,Bau…

什么?用Python实用脚本也能实现快速卡通画人物头像,这不就是妥妥的QQ秀嘛。

前言 今天我们就利用Python脚本实现天气查询应用吧。直接开整~ 思路分析 从大量照片/卡通数据中习得照片到卡通画的映射。 开发工具 python版本: 3.6 相关模块: pytorch 1.4 tensorflow-gpu 1.14 face-alignment dlib 1.数据准备 训练数据包括…

Linux入门—Shell常用命令之打包压缩

本文由【正厚软件】沙老师提供 打包压缩命令 1. gzip 命令 命令功能:压缩或展开文件 命令格式: ogzip [ -acdfhlLnNrtvV19 ] [-S 后缀] [ 文件名 ... ] :压缩文件 ogunzip [ -acfhlLnNrtvV ] [-S 后缀] [ 文件名 ... ] :解压缩文件…

离线安装harbor容器镜像仓库单机版(harbor-v2.3.5)

记录:358 场景:在CentOS 7.9操作系统上,离线部署harbor容器镜像仓库单机版,使用Redis为外部缓存、使用PostgreSQL为外部数据库、使用docker-ce操作容器、使用docker-compose操作harbor容器镜像仓库。 版本: 操作系统…

OpenAI chatGPT火爆出圈,世界悄悄发生着变化

OpenAI chatGPT火爆出圈,世界悄悄发生着变化一、为什么突然火起来了?二、ChatGPT功能实例2.1 [AI聊天](https://chat.openai.com/chat)2.2 [AI写新闻稿](https://chat.openai.com/chat)2.3 [AI写代码](https://chat.openai.com/chat)2.4 [AI写论文](http…

Kubernetes二进制单节点集群部署

Kubernetes二进制单节点集群部署 常见的K8S按照部署方式 ●Mini kube Minikube是一个工具,可以在本地快速运行一个单节点微型K8S,仅用于学习、预览K8S的一些特性使用部署地址: https://kubernetes.io/docs/setup/minikube ●Kubeadmin Kubea…

浅谈Kernel32.dll(Windows平台下必有的动态库文件)

今天听了前辈的黑客攻击的知识分享,里面比较基础的元素就是Kernel32.dll,我对它感兴趣好久了,今天搜集一些资料,有关Kernel32的。 目录 ​编辑 一、Kernel32介绍 二、Kernel32内存管理 三、引起Kernel32出错的主要元凶 四、解…

【求助帖】从技术转为项目经理后,如何快速进入角色?

近日,看到了一个求助贴,小李今年26岁,干了两年技术后,现在转行到项目经理的岗位。每天东奔西跑、天天加班还是感觉很吃力、工作也没有成效,想问下如何能快速进入角色? 那么小李的一天具体是怎么样的呢&…

追格小程序重磅升级 新亮点来袭!

追格小程序是一个积木式小程序搭建框架,基于UniappWordPress开发,代码免费开源不加密且支持二开,安装追格相应扩展模块,简单配置即可快速搭建不限于圈子社区、知识付费、活动报名、资讯等类型小程序。 新的亮点是什么 追格小程序…

以太网 VLAN(VLAN数据帧格式、交换机接口类型)

2.8.2 以太网 VLAN(VLAN数据帧格式、交换机接口类型) 原始的以太网数据帧没有802.1QTag字段,在网络中进行转发的时候能够被主机接收、解封查看。 而一但有了802.1Q Tag字段的以太网数据帧,主机即使能接收数据帧,也无法…

233的字符串

//在群里看到了老师发布的下面这条消息,许久没打代码,打算找找感觉,第一道就拿捏我了,题目不是很难,但是高数据范围的超时问题一直是我未找到解决办法的一个问题,虽然现在比赛未结束,不过我的错…

人脑如果是台计算机,那么电从哪里来?

1.人脑是一台量子计算机 2022年10月7日,爱尔兰都柏林三一学院的实验团队在《物理学通讯》杂志上发表了一篇名为《非经典脑功能的实验指标》的论文。研究人员在论文中写道:“我们的研究结果表明,我们可能已经目睹了由意识相关的大脑功能介导的…

我写这10+个JavaScript单行代码,被组长夸代码写得优雅

JavaScript 非常大的特点容易上手且非常灵活,代码实现方式五花八门;有时候能一行代码解决,就尽量不用两行。 本文整理了非常有用的单行代码,这些需求都是在开发中非常常见的,用单行代码可以帮助你提高工作效率。 数组…

问卷开头语怎么写?

问卷的开头语是一份问卷的开场,开场好不好关系到整个问卷过程能够顺利进行。所以,在关注问卷的标题、题目、设计以外,我们也要重视起问卷的开头语。通俗易懂的内容更易进行传播,这一点也可以运用到问卷中,表达清晰、完…

低代码平台数据表格组件的设计实践

在做低代码产品的过程中,产品经理可能会遇到各种各样的问题,比如部分产品经理可能会因为对数据模型的不熟悉,而在实际对接中产生一定障碍。所以产品经理要如何在低代码工作中铲除障碍、并进行决策?本篇文章里,作者结合…

⚡热点管理模块⚡

热点管理模块概念 如果一个文件在连续一段时间内没有访问到,则该文件是一个非热点文件,否则位热点文件。在服务上上有两个目录,一个目录是backdir存储的是热点文件,一个目录是packdir存储的是非热点文件热点管理模块每隔一段时间…

ROHM | 开发出隔离型DC-DC转换器“BD7Fx05EFJ-C”

全球知名半导体制造商ROHM(总部位于日本京都市)开发出两款隔离型反激式*1DC-DC转换器“BD7F105EFJ-C”和“BD7F205EFJ-C”,新产品非常适用于xEV(电动汽车)的主驱逆变器、车载充电器(以下简称“OBC”&#x…

Unity Addressables资源管理 设置远程加载资源

1.添加Group 点击 PackedAssets 可添加默认设置的组 Blank 则是无设置的 修改名字并添加了一张图片 图片挂在WindowImage预制体上 2.设置模式 Group可选择打包模式: 本地,远程,自定义 设置了后这个包会打到不同的路径,加载也只…

环形石子合并(区间DP)

将 n 堆石子绕圆形操场排放,现要将石子有序地合并成一堆。 规定每次只能选相邻的两堆合并成新的一堆,并将新的一堆的石子数记做该次合并的得分。 请编写一个程序,读入堆数 nn 及每堆的石子数,并进行如下计算: 选择一…

代码随想录刷题记录day39 完全背包+零钱兑换 II+组合总和 Ⅳ

代码随想录刷题记录day39 完全背包零钱兑换 II组合总和 Ⅳ 参考:代码随想录 完全背包 有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品都有无限个(也就是可以放入背包多次&#xff09…