开发工具使用之 Catch2

介绍

目前使用的测试框架,好处就是只有头文件,方便无论是新人还是老人进行开发(gtest 需要编译成 静态库,使用上有点难度)

CHECK 和 REQUIRE

CHECKREQUIRE 用于检测当前括号中的表达式是否为真,常用于校验函数的结果是否符合预期,从而达到测试函数逻辑的目的

TEST_CASE("TEST", "[test1]") {
    CHECK(1 == 1);    //    CHECK 在检查项错误的时候,不会导致程序停下来
    REQUIRE(1 == 1); //    REQUIRE 在检查项错误的时候,会停下程序

    CHECK_FALSE(1 == 0);    //    等价于 CHECK(1 != 0);
    REQUIRE_FALSE(1 == 0);    //  等价于 REQUIRE(1 != 0);

    // 检测当前表达式中是否没有异常
    REQUIRE_NOTHROW(expression);
    CHECK_NOTHROW(expression);

    //    检测当前表达式是否有异常
    REQUIRE_THROWS(expression);
    CHECK_THROWS(expression);
}

但是 CHECK 这种,在宏展开的时候会有些问题:

//    error
CHECK(a == 1 && b == 2);
CHECK(a == 2 || b == 1);

//    right
CHECK((a == 1 && b == 2));
CHECK((a == 2 || b == 1));


SECTION

SECTION 主要用于测试某个类的多个函数。

TEST_CASE( "vectors can be sized and resized", "[vector]" ) {
    std::vector<int> v( 5 );

    REQUIRE( v.size() == 5 );
    REQUIRE( v.capacity() >= 5 );

    SECTION( "resizing bigger changes size and capacity" ) {
        v.resize( 10 );
        REQUIRE( v.size() == 10 );
        REQUIRE( v.capacity() >= 10 );
    }

    SECTION( "resizing smaller changes size but not capacity" ) {
        v.resize( 0 );
        REQUIRE( v.size() == 0 );
        REQUIRE( v.capacity() >= 5 );
    }
}


Matchers

当前的表达式在 matcher 中是否成立

REQUIRE_THAT(expression, matchers);

String

验证某个 string 是否以某个 string 结束:

using Catch::Matchers::EndsWith; // or Catch::EndsWith

std::string str = getStringFromSomewhere();

REQUIRE_THAT(str, EndsWith("as a service" ))

验证某个 string 是否以某个 string 开始:

using Catch::Matchers::StartsWith; // or Catch::EndsWith

std::string str = getStringFromSomewhere();

REQUIRE_THAT(str, StartsWith("as a service"))

验证某个 string 是否包含某个 string:

using Catch::Matchers::StartsWith; // or Catch::EndsWith

std::string str = getStringFromSomewhere();

REQUIRE_THAT(str, Contains("as a service"))

 上一篇
UDS 协议详解 UDS 协议详解
基本概念对于 UDS 协议,没法剥离出一个完全原子的概念出来理解,很多概念之间是相互穿插着的。 所以私以为一种比较好的理解思路便是,一股脑的介绍完所有的概念, 然后再通过一个简单的服务请求,或是 DTC 的报告,将这些概念逐个逐个的进行穿插
2024-07-21
下一篇 
开发工具使用之 Git 开发工具使用之 Git
Git 常用指令add# 将某个文件的修改提交到暂存区 git add filename # 将所有发生过修改的,以及新增的文件都添加到暂存区中 git add . branch# 创建分支 git branch branch_n
2024-05-04
  目录