【CMake系列】10-cmake测试 ctest

news/2024/10/11 2:27:09

cmake作为一个强大的构建系统指导工具,同时也提供了测试功能,可用于项目的单元测试等,也可以与其他测试框架协作,如googletest,共同完成项目开发中的测试工作,本节我们就来学习 如何借助cmake 完成测试

本专栏的实践代码全部放在 github 上,欢迎 star !!!

如有问题,欢迎留言、或加群【392784757】交流

接下来给出我们本节的CMakeLists.txt 文件

cmake_minimum_required(VERSION 3.20)project(test_ctest)file(WRITE test_ctest.cpp [=[#include <iostream>
using namespace std;int main(int argc,char* argv[])
{if(argc <=1 ) // 没有传递参数return -1;cout<<argv[1]<<endl;return 0;
}
]=])add_executable(test_ctest test_ctest.cpp)# 测试用例
add_test(NAME test_return_-1 #
COMMAND test_ctest 
)add_test(NAME test_return_0 #
COMMAND test_ctest test_return_0
)##################
add_test(NAME test_success # 测试控制台输出
COMMAND test_ctest success)set_tests_properties(test_success
PROPERTIES
PASS_REGULAR_EXPRESSION success #成功字符串匹配正则)add_test(NAME test_failed # 测试控制台输出
COMMAND test_ctest failed) 
set_tests_properties(test_failed
PROPERTIES
FAIL_REGULAR_EXPRESSION failed #成功字符串匹配正则)enable_testing()

接下来,我们将逐行进行解释,

首先,我们来明确一下测试,将我们的程序的输出与期待输出进行判断
程序的输出 在这里分为两种情况
程序运行 控制台输出
程序运行 返回值 (最常见的也就是 main 函数 返回 0 还是 -1)

也就是对程序的执行过程进行验证,是否符合我们的预期

cmake 测试

涉及命令

  • add_test()
add_test(NAME <name> 
COMMAND <command> [<arg>...] # 具体执行的命令 也就是 运行程序
[CONFIGURATIONS <config>...]
[WORKING_DIRECTORY <dir>]
[COMMAND_EXPAND_LISTS])
  • set_tests_properties()
    设定测试属性
    PASS_REGULAR_EXPRESSION 匹配失败的控制台输出
    FAIL_REGULAR_EXPRESSION 匹配成功的控制台输出

如下面的事例,
程序输出 success ,则程序运行符合逻辑,即测试通过
程序输出 failed,则程序运行不符合逻辑,测试未通过

add_test(NAME test_success # 测试控制台输出
COMMAND test_ctest success
)set_tests_properties(test_success
PROPERTIES
PASS_REGULAR_EXPRESSION success #成功字符串 匹配正则
)add_test(NAME test_failed # 测试控制台输出
COMMAND test_ctest failed) 
set_tests_properties(test_failed
PROPERTIES
FAIL_REGULAR_EXPRESSION failed #成功字符串匹配正则
  • enable_testing()
    启用测试

构建过程

cmake -S . -B buildcmake --build buildcd build 
ctest -C Debug

输出测试结果
在这里插入图片描述

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

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

相关文章

PS2045L-ASEMI低Low VF肖特基PS2045L

PS2045L-ASEMI低Low VF肖特基PS2045L编辑:ll PS2045L-ASEMI低Low VF肖特基PS2045L 型号:PS2045L 品牌:ASEMI 封装:TO-277 最大平均正向电流(IF):20A 最大循环峰值反向电压(VRRM):45V 最大正向电压(VF):0.24V~0.39V 工作温度:-55C~150C 反向恢复时间:5ns 芯片个数…

mybatis-plus加载多个module的mapper踩坑记录

想要多个module中的mapper.xml文件都被加载到,配置文件中mybatis-plus.mapper-locations这一项必须以classpath*:开头,否则就只会加载匹配到的第一个module中的指定目录背景 有一个多模块的项目,每个模块中都有自己的mapper.xml文件。但是在执行一次SQL查询中,mybatis却报出…

Quasar+Electron开发打包为桌面端exe

上一篇博客写了 Quasar+Cordova开发打包移动端app ,今天来写一下Quasar+Electron如何开发打包为桌面端exe。 Electron 英文文档:https://www.electronjs.org/docs/latest/ Electron 中文文档:https://electron.nodejs.cn/ Quasar+Electron文档:https://www.quasar-cn.cn/q…

带你走进信息安全软件架构

经纬恒润车端信息安全解决方案整合了 MCU 端以及 MPU 端的信息安全解决方案,具体方案包括 Security Boot、安全通信、安全存储、安全诊断和入侵检测等,能满足欧标强制法规要求和国内信息安全法规要求,符合欧标出口要求的车载信息安全技术架构。 汽车信息安全逐步受到重…

爬虫 | 防盗链和代理

防盗链referer: 一种反爬方式。一些网站在响应之前会先溯源,检查请求的网址X,是从哪个链接进入的(即上一级网址是谁),比如:通过网址A--->进入网址X,那么上一级就是A。如果发现上一级网址不存在,或者错误,则认为是其他歪门邪道来的,就不给你数据。这个就是防盗链r…

【接口自动化测试框架练习】springboot+react+mysql~极简版postman

可以说是一个toy program,chatgpt完成了一部分工作,我也完成了一部分工作,我俩合作的,我占百分之80%,他百分之20%,哈哈没他不行,源码奉上。https://github.com/Jinwenxin/test-api-frontend 1.功能简介: 分成三部分,如左侧导航栏所示:测试用例管理:测试用例的增删改…

django 的安装和启动

1.pycharm创建project 方法与之前selenium相同 2.app的创建和说明 在项目目录下(与manange.py同级的)的地方 打开终端 在项目目录下输入pyhton manage.py startapp app01(这个是你想给app命名的名字),这样就创建好了app。然后注册app01,找到jango里的settings文件,在INST…

【VMware vSAN】修改虚拟机名称后如何改变在 vSAN 数据存储中的名称。

如果在 vSphere 集群环境修改虚拟机的名字后,虚拟机所在的数据存储文件中的名称并不会改变,我们知道可以通过执行一下 Storage vMotion 操作,以通知虚拟机在数据存储中的改变。但是,这个操作需要环境中至少具有第二个数据存储才能执行 Storage vMotion 来往返迁移虚拟机,最…