C++那些事之项目篇Catch2

news2024/11/18 7:48:58

C++那些事之项目篇Catch2

今天推荐一个值得学习的开源项目"Catch2" ,之前写过如何使用google的googletest编写单元测试,你会发现需要编译生成lib库,比较麻烦,而Catch2是一个Header only库,能够快速使用,只需要引入header file,便可以直接使用,本节的练习代码将会在星球提供,已在星球的阅读下载即可,不在的可以扫末尾二维码加入哦。

本节对应的视频教程:

5a007f2297791878a13667d6b3ba0fa3.jpeg

任何一个大型项目都需要单元测试,那么本节就来引入项目篇之快速单元测试系列之一Catch2。

Catch2是一个功能丰富的C++测试框架,用于编写单元测试、集成测试和功能测试。它是一个开源项目,旨在提供简洁、直观和强大的测试编写和执行体验。

使用Catch2可以轻松编写和组织测试用例,并提供丰富的断言和测试宏来验证代码的行为和预期输出。它具有清晰的测试报告输出,支持标记和过滤测试用例,以及灵活的测试配置选项。

https://github.com/catchorg/Catch2/tree/v2.13.10

870355c2d77f10da8d971c438c1ac825.png

Catch2支持TDD (Test-Driven Development) 和 BDD (Behavior-Driven Development) 。

TDD 的核心理念是在编码之前先编写测试用例,这有助于开发者更清楚地了解所需的功能,并在开发过程中提供反馈和验证。

BDD(行为驱动开发)是一种从用户行为的角度出发的开发方法。它强调使用自然语言来描述系统的行为,并将这些描述转化为可执行的测试用例。

TDD示例:

#define CATCH_CONFIG_MAIN
#include "catch.hpp"

// 阶乘函数
int factorial(int n) {
    if (n <= 0)
        return 1;
    else
        return n * factorial(n - 1);
}

TEST_CASE("Factorial Calculation") {
    SECTION("Factorial of positive integer") {
        REQUIRE(factorial(5) == 120);
        REQUIRE(factorial(6) == 720);
        REQUIRE(factorial(10) == 3628800);
    }

    SECTION("Factorial of zero") {
        REQUIRE(factorial(0) == 1);
    }

    SECTION("Factorial of negative integer") {
        REQUIRE(factorial(-5) == 1);
        REQUIRE(factorial(-10) == 1);
    }
}

BDD示例:

#define CATCH_CONFIG_MAIN
#include "catch.hpp"

// 阶乘函数
int factorial(int n) {
    if (n <= 0)
        return 1;
    else
        return n * factorial(n - 1);
}

SCENARIO("Factorial Calculation", "[factorial]") {
    GIVEN("A positive integer") {
        int n = 5;

        WHEN("Factorial function is called") {
            int result = factorial(n);

            THEN("The result should be the factorial of the input number") {
                int expected = 120;
                REQUIRE(result == expected);
            }
        }
    }

    GIVEN("Zero as the input") {
        int n = 0;

        WHEN("Factorial function is called") {
            int result = factorial(n);

            THEN("The result should be 1") {
                int expected = 1;
                REQUIRE(result == expected);
            }
        }
    }

    GIVEN("A negative integer") {
        int n = -5;

        WHEN("Factorial function is called") {
            int result = factorial(n);

            THEN("The result should be 1") {
                int expected = 1;
                REQUIRE(result == expected);
            }
        }
    }
}

可以看到以上示例的写法完全不一样!

最后,值得一提的是Catch2 v3版本出来了,最大的变化是Catch2不再是一个单头库,因此如果想只用一个header file,就下载v2版本吧。本节完!

17db16b91879c6b464b93da801d12204.jpeg

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

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

相关文章

Python3数据分析与挖掘建模(13)复合分析-因子关分析与小结

1.因子分析 1.1 探索性因子分析 探索性因子分析&#xff08;Exploratory Factor Analysis&#xff0c;EFA&#xff09;是一种统计方法&#xff0c;用于分析观测变量之间的潜在结构和关联性。它旨在确定多个观测变量是否可以归结为较少数量的潜在因子&#xff0c;从而帮助简化…

机器学习笔记 - 多实例学习(MIL)弱监督学习

一、多实例学习概述 多实例学习(MIL)是一种弱监督学习形式,其中训练实例被排列在称为袋的集合中,并为整个袋提供标签。这种方式越来越受到人们的关注,因为它自然适合各种问题,并允许利用弱标记数据。因此,它被应用于计算机视觉和文档分类等不同的应用领域。 多实例学习(…

【国产虚拟仪器】基于 ZYNQ的声发射采集系统方案

系 统 的 整 体 设 计 流 程 为 根 据 上 述 设 计 需 求 进 行 硬 件 设 备 的 选 型 并 搭 建 起 声 发 射 采 集 系 统 的 硬 件 平 台 &#xff0c; 在 该平 台 上 进行 声 发 射 采 集 板 卡 的 设 计 并 根 据 要求进行 上 位 机…

2023上半年的九个觉悟

‍觉悟&#xff0c;就是觉了、悟了。有时候&#xff0c;你看到一句话&#xff0c;突然就觉悟了。 一、资本主义的问题 “资本主义把我们都缩减成了一个东西&#xff1a;消费者” 因此&#xff0c;人人都成为资本家利诱、操控、围猎的对象。 同时&#xff0c;金钱成为全民的神&a…

【PHP】Wampserver启动时呈现黄色的解决方案

首先&#xff0c;我们可以进入服务查看WampServer的服务是哪几个没有开&#xff1f; 经观察上图发现&#xff1a; apache没有开启sql没有开启 如果你点击开启&#xff0c;将会出现报错信息&#xff0c;因为服务冲突 所以解决方式就是&#xff1a;关闭冲突服务&#xff0c;再次…

基于SpringBoot+Vue的校园台球厅人员与设备管理系统设计与实现

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架下…

基于JavaWeb SSM mybatis 学生信息管理系统设计和实现以及文档报告

基于JavaWeb SSM mybatis 学生信息管理系统设计和实现以及文档报告 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源…

想要更好地理解大模型架构?从计算参数量快速入手

编者按&#xff1a;要理解一种新的机器学习架构&#xff08;以及其他任何新技术&#xff09;&#xff0c;最有效的方法就是从头开始实现它。然而&#xff0c;还有一种更简单的方法——计算参数数量。 通过计算参数数量&#xff0c;读者可以更好地理解模型架构&#xff0c;并检查…

LBP特征提取

文章目录 1 LBP原理及其扩展1.1 原始LBP1.2 圆形LBP1.3 旋转不变LBP1.4 Uniform Pattern LBP1.5 MB-LBP 2. 对于边缘点的处理3. LBP的Python应用4. LBPH算法及其应用4.1 LBPH算法原理4.2 LBPH识别应用 5. 源码仓库地址 LBP指局部二值模式&#xff0c;英文全称&#xff1a;Local…

3.1 基于配置文件整合SSM框架实现用户登录

一、基于XML配置方式整合SSM框架实现用户登录 1、创建数据库与表 &#xff08;1&#xff09;创建数据库 数据库simonshop&#xff0c;采用utf8mb4编码 &#xff08;2&#xff09;创建用户表 创建用户表t_user CREATE TABLE t_user (id int(11) NOT NULL AUTO_INCREMENT,u…

中国金融,如何向科技要答案?

一个科技初创公司&#xff0c;能否凭借科创成果及时获得信贷准入&#xff1f; 一个农民兄弟能否在春播时&#xff0c;获得精准的无抵押贷款&#xff1b;秋收时&#xff0c;通过银行App找到性价比最高的买家&#xff1f; 一家企业&#xff0c;能否通过其生产及交易信息获取线上融…

对话利星行汽车:合作圆满,对斯歌充分信任!

上海斯歌在利星行汽车的OA替换项目中&#xff0c;喜提客户高度评价。近日&#xff0c;就企业数字化及斯歌产品、服务、体验等问题&#xff0c;斯歌与利星行汽车的管理信息系统总经理庄淑菱女士展开了一次对话访谈。 利星行汽车简介 利星行汽车于1993年进入中国大陆市场&#xf…

【实战经验】vant中picker选择器封装,让你的表单选择更简单

前言 对于选择器组件&#xff0c;vant 中的 picker 组件是一个非常合适的选择。它不仅提供了灵活的配置选项&#xff0c;还可以很方便地与其他 vant 组件结合使用&#xff0c;帮助我们快速搭建出漂亮、易用的移动端页面。在本文中&#xff0c;我将为大家介绍如何基于 vant 的 p…

【第二天议程】大会议题重磅出炉,豪华阵容等你面基!RustChinaConf 2023!

本次大会议题品质一流&#xff0c;嘉宾多来自行业一线&#xff0c;干货多多&#xff0c;且在各领域遍地开花&#xff0c;可看出Rust星星之火在中国已成燎原之势&#xff01; 大会时间地址 6.17 - 6.18 浦东新区张杨路777号 上海锦江汤臣洲际酒店 官网地址 https://rustcc.cn/20…

# Windows 安装 Docker

Windows 安装 Docker 文章目录 Windows 安装 Docker何为Docker前言安装过程安装 Hyper-V安装 Docker Desktop for WindowsWSL 2 installation is incomplete 配置阿里云镜像加速地址Windows PowerShell查看Docker版本 Docker启动Nginx不挂载运行挂载运行随便启动一个 Nginx 容器…

【leetcode】189.轮转数组

方法1&#xff1a; 先把原数组拷贝一份&#xff0c;然后先将原数组的后k个拷贝&#xff0c;再将前numsSize-k个拷贝 void rotate(int* nums, int numsSize, int k) {//可能存在k>numsSize的情况&#xff0c;先处理kk k % numsSize;//拷贝数组int arr[numsSize];int i 0;in…

网络安全的学习路线是怎么样的?不同人路不同,快来对号入座吧!

最近看到网上有很多人在问诸如&#xff1a;“怎样成为网络安全工程师”等相关问题 这可能与近几年网络安全事件频发&#xff0c;国家对于互联网信息安全和互联网舆情的重视程度不断提升有关&#xff0c;网络信息安全工程师随之成为炙手可热的职业。关于职业前景的详细分析&…

【DBA 警世录之习惯性命令---读书笔记】

&#x1f448;【上一篇】 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 【下一篇】&#x1f449; &#x1f53b;【&#x1f4a3; 话题引入&#xff1a;既然 DBA 这个职业如此危险&#xff0c;那么哪些习惯是 DBA 必须养成的呢&#x…

cuda5 程序执行与硬件关系

这里写目录标题 GPU流式多处理器CUDA内置变量WARP技术细节性能优化 规约规约算法总结 并行规约算法1规约2规约算法 3规约算法4规约5‘规约6for 循环展开 成功优化关键volatile cuda优化2规约算法应用&#xff1a;内积 线程块对应SM GPU流式多处理器 一个sm 有32个cuda core C…

2023最新版互联网工程师Java中级、高级面试题总结(1000道题含答案解析)

作为一名优秀的程序员&#xff0c;技术面试都是不可避免的一个环节&#xff0c;一般技术面试官都会通过自己的方式去考察程序员的技术功底与基础理论知识。 如果你参加过一些大厂面试&#xff0c;肯定会遇到一些这样的问题&#xff1a; 1、看你项目都用的框架&#xff0c;熟悉…