首页 > 其他分享 >【CMake系列】10-cmake测试 ctest

【CMake系列】10-cmake测试 ctest

时间:2024-06-12 13:46:16浏览次数:21  
标签:10 cmake 输出 failed 测试 test CMake ctest

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 build

cmake --build build

cd build 
ctest -C Debug

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

标签:10,cmake,输出,failed,测试,test,CMake,ctest
From: https://www.cnblogs.com/caibucai/p/18243782

相关文章

  • 【CMake系列】09-cmake install 一般文件 文件夹 代码文件
    上一节,我们学习了项目构建后、目标的安装,本节学习的内容是对于一般文件,文件夹以及源代码的安装本节的文件依然使用file(WRITExxx.xx)来创建,不依赖额外的文件本专栏的实践代码全部放在github上,欢迎star!!!如有问题,欢迎留言、或加群【392784757】交流文件安装CMakeLi......
  • 一个串行程序,94%的执行时间花费在一个可以并行化的函数中。现使其并行化,问该并行程序
    经测试发现,1)一个串行程序,94%的执行时间花费在一个可以并行化的函数中。现使其并行化,问该并行程序在10个处理机上执行所能达到的加速比是多少?能达到的最大加速比是多少?2)一个并行程序,在单个处理机上执行,6%的时间花费在一个I/O函数中,问要达到加速比10,至少需要多少个处理机?......
  • 【平头哥开源CPU——玄铁C910】开源项目库配置和前仿真记录
    C910开源项目库配置C910开源项目库中有很多问题,比如我做到makecompile的时候一直在报错无法找到工程下的某个文件,主要原因是平头哥官方提供的环境变量配置文件类型是.csh的,而我的linux工作站里没有csh而且没有联网。所以把csh文件内容做了修改也成功跑通了,现在分享一下。......
  • LeetCode刷题之HOT100之单词搜索
    2024/6/12这两天天气只能用闷、潮、热来描述。整个人像被罩在为了饭菜保温的盖子里,喘气困难、粘稠的空气一次又一次打湿我。唯有空调救我,夏天来了。Anyway,昨天只做了一题,今天早点来做一题。1、题目描述2、逻辑分析给定一个二维字符矩阵和一个单词,求单词是否在这个二维......
  • 100个常用Shell使用命令详解
    转载自公众号:一口Linux 在大多数的Linux和Unix系统、及其他类Unix系统中,Shell是用户与操作系统内核交互的主要方式。作为一种强大的命令行解释器,它也支持编程功能,用户可以写脚本来处理各种任务。无论是新手还是专业人士,掌握Shell命令都是必不可少的技能。本文逐个解读和展示Sh......
  • 备件FM910,FM920工控模块
    备件FM910,FM920工控模块。通常与步进电机或者伺服电机配使用构成闭环或者半闭环的控制系统。2.4接近开关:备件FM910,FM920工控模块。接近开关是一种无需与运动部件进行机械直接接触而可以操作的位置开关,接近开关也是依据电磁感应的原理设计制造的,备件FM910,FM920工控模块。所以......
  • 10 种超赞的 MyBatis 写法!
    https://mp.weixin.qq.com/s/U3m2iLfujYLy5T-B2OI3ZA MyBatis虽说给我们的开发带来了很多的便捷,但有些地方写起来依旧比较的麻烦,比如配置XML的时候,但是一个好的写法,不仅能为我们节省不少时间、还能能降低出错的概率,下面就给大家分享一些优质的写法: 1、用来循环容器的标签fo......
  • 代码随想录算法训练营第第35天 | 977.有序数组的平方1005.K次取反后最大化的数组和 、
    1005.K次取反后最大化的数组和本题简单一些,估计大家不用想着贪心,用自己直觉也会有思路。https://programmercarl.com/1005.K次取反后最大化的数组和.html自己写的时间复杂度太高,看答案优化/***@param{number[]}nums*@param{number}k*@return{number}*/varl......
  • 6.10
    实验项目名称:实验三  Web数据库程序设计一、实验目的通过使用JSP技术设计一个简单的数据库管理系统,了解展示页面和编辑页面的区别,掌握Web服务器与MySQL数据库的连接和数据库操作的方法,掌握使用Java语言编写JSP文件的方法。二、实验内容和基本要求从以下列举的四个数据库中,任......
  • [DP] [倍增优化] Luogu P1081 [NOIP2012 提高组] 开车旅行
    [NOIP2012提高组]开车旅行题目描述小\(\text{A}\)和小\(\text{B}\)决定利用假期外出旅行,他们将想去的城市从$1$到\(n\)编号,且编号较小的城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市\(i\)的海拔高度为\(h_i\),城市\(i\)和城市\(j\)之间的距......