前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++那些事之项目篇Catch2

C++那些事之项目篇Catch2

作者头像
公众号guangcity
发布2023-09-02 10:35:41
2950
发布2023-09-02 10:35:41
举报
文章被收录于专栏:光城(guangcity)光城(guangcity)

C++那些事之项目篇Catch2

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

本节对应的视频教程:

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

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

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

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

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

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

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

TDD示例:

代码语言:javascript
复制
#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示例:

代码语言:javascript
复制
#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版本吧。本节完!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-06-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 光城 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • C++那些事之项目篇Catch2
相关产品与服务
腾讯云服务器利旧
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档