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

输出测试结果

【CMake系列】10-cmake测试 ctest的更多相关文章

  1. Windows 10上源码编译glog和gflags 编写glog-config.cmake和gflags-config.cmake | compile glog and glags on windows from source

    本文首发于个人博客https://kezunlin.me/post/bb64e398/,欢迎阅读! compile glog v0.3.5 and glags on windows from sour ...

  2. 【转载】CMake 简介和 CMake 模板

    转载自我的博客: CMake 简介和 CMake 模板 . 如果你用 Linux 操作系统,使用 cmake 会简单很多,可以参考一个很好的教程: CMake 入门实战 | HaHack .如果你用 ...

  3. Java 集合系列 10 Hashtable详细介绍(源码解析)和使用示例

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  4. CMake安装或CMake Error at CMakeLists

    CMake安装或CMake Error at CMakeLists 发生情景: 使用cmake命令安装软件时,报如下错误: CMake Error at CMakeLists.txt:4 (CMAKE ...

  5. <<Modern CMake>> 翻译 2. CMake 基础

    <<Modern CMake>> 翻译 2. CMake 基础 最低版本 这是每个 CMakeLists.txt 文件的第一行.CMakeLists.txt 是 CMake 所 ...

  6. <<Modern CMake>> 翻译 1. CMake 介绍

    <<Modern CMake>> 翻译 1. CMake 介绍 人们喜欢讨厌构建系统. 仅仅观看 CppCon17 上的演讲,就可以看到开发人员因为构建系统而闹笑话的例子. 这 ...

  7. ubuntu 16.04上源码编译glog和gflags 编写glog-config.cmake和gflags-config.cmake | compile glog and glags on ubuntu 16.04

    本文首发于个人博客https://kezunlin.me/post/977f5125/,欢迎阅读! compile glog and glags on ubuntu 16.04 Series comp ...

  8. 编写自定义cmake配置文件FindXXX.cmake或者xxx-config.cmake | cmake with user defined entry

    本文首发于个人博客https://kezunlin.me/post/12ab5707/,欢迎阅读! cmake with user defined entry Guide FindXXX.cmake ...

  9. [转帖]TPC-C解析系列01_TPC-C benchmark测试介绍

    TPC-C解析系列01_TPC-C benchmark测试介绍 http://www.itpub.net/2019/10/08/3334/ 学习一下. 自从蚂蚁金服自研数据库OceanBase获得TP ...

  10. C# 基础知识系列- 10 反射和泛型(二)

    0. 前言 这篇文章延续<C# 基础知识系列- 5 反射和泛型>,继续介绍C#在反射所开发的功能和做的努力.上一篇文章大概介绍了一下泛型和反射的一些基本内容,主要是通过获取对象的类型,然后 ...

随机推荐

  1. P2467 [SDOI2010] 地精部落 学习笔记

    DP 显然我固定第一个是峰,然后再乘以2就是答案,因为一个合法的反转之后也是合法的而且谷峰颠倒了 发现如果设\(dp[i][j]\)表示前\(i\)个山脉,第\(i\)个山脉是高度\(j\)的答案,然 ...

  2. 高通安卓:自定义QFile烧录镜像

    高通安卓:自定义QFile烧录镜像 背景 在某个项目中,因为USB口的问题,无法使用fastboot进行download. 同事提供了一份用与QFile的rawprogram.xml烧写.觉得这个方法 ...

  3. QT学习:08 QString

    --- title: framework-cpp-qt-08-QString EntryName: framework-cpp-qt-08-QString date: 2020-04-16 15:36 ...

  4. vba--数组

    Sub shishi() Range("e2") = Split(Range("e1"), "-")(0) '用短横线分隔后取第1个值 En ...

  5. ChatGPT学习之旅 (8) 单元测试助手

    大家好,我是Edison. 本篇我们基于上一篇的基础,来写一个单元测试助手的prompt,让它帮我们写一些我们.NET开发者不太愿意编写的单元测试代码,进而提高我们的代码质量,同时还降低我们的开发工作 ...

  6. Vue介绍和使用

    一.Vue介绍 - Vue是一套构建用户界面的渐进式前端框架.- 只关注视图层,并且非常容易学习,还可以很方便的与其它库或已有项目整合.- 通过尽可能简单的API来实现响应数据的绑定和组合的视图组件. ...

  7. 记一次 CDN 流量被盗刷经历

    先说损失,被刷了 70 多RMB,还好止损相对即时了,亏得不算多,PCDN 真可恶啊. 600多G流量,100多万次请求. 怎么发现的 先是看到鱼皮大佬发了一篇推文突发,众多网站流量被盗刷!我特么也中 ...

  8. Serverless无服务应用架构纵横谈2:边缘计算激战正酣

    Serverless无服务应用架构纵横谈2 前言 6年前,我写了一篇<Serverless无服务应用架构纵横谈>. 文中说到无论是公有云FaaS还是私有云FaaS,都不是云计算的未来. 因 ...

  9. 图表绘制之RepeatNode的妙用

    图表绘制之RepeatNode的妙用 前言 最近接到许多大屏项目,其中有一个智慧大楼的项目,大致是由3d场景+数据图表组成,需要能监控实时数据.安防 监控.出入统计以及消防安全等功能如下图 但是在开发 ...

  10. 使用了条件三元运算符来判断 this.temp.id 是否存在且 mt_qty 是否已被赋值

    mt_qty: (this.temp.id && this.temp.mt_qty) ? this.temp.mt_qty : event.wo_wip,在这个修正后的代码中,使用了条 ...