gtest之断言

news2024/9/21 16:24:07

目录

  • 普通断言
    • EXPECT_THAT
  • 布尔条件断言
    • EXPECT_TRUE
    • EXPECT_FALSE
  • 二进制断言
    • EXPECT_EQ
    • EXPECT_NE
    • EXPECT_LT
    • EXPECT_LE
    • EXPECT_GT
    • EXPECT_GE
  • 字符串比较
    • EXPECT_STREQ
    • EXPECT_STRNE
    • EXPECT_STRCASEEQ
    • EXPECT_STRCASENE
  • 浮点型比较
    • EXPECT_FLOAT_EQ
    • EXPECT_DOUBLE_EQ
    • EXPECT_NEAR
  • 显式成功与失败
    • SUCCEED
    • FAIL
    • ADD_FAILURE
    • ADD_FAILURE_AT
  • 异常断言(未验证)
    • EXPECT_THROW
    • EXPECT_ANY_THROW
    • EXPECT_NO_THROW
  • 谓词断言
    • EXPECT_PRED*
    • EXPECT_PRED_FORMAT*
  • 死亡断言

gtest中assert的头文件: gtest/gtest.h
EXPECT_和ASSERT_两种形式,EXPECT_产生非致命错误,ASSERT_产生致命错误并中断当前函数;所有断言宏支持使用重载<<的流输出

普通断言

EXPECT_THAT

todo

布尔条件断言

EXPECT_TRUE

EXPECT_TRUE(condition)
ASSERT_TRUE(condition)
验证condition是否为true,true为通过

EXPECT_FALSE

EXPECT_FALSE(condition)
ASSERT_FALSE(condition)
验证condition是否为false

二进制断言

用来比较两个值,参数中的两个值必须是可以比较的(支持比较运算符)
如果一个参数支持<<操作符,当比较失败时会被调用打印参数,否则gtest会用它认为最好的方式打印,具体参考https://google.github.io/googletest/advanced.html#teaching-googletest-how-to-print-your-values
Arguments are always evaluated exactly once, so it’s OK for the arguments to have side effects. However, the argument evaluation order is undefined and programs should not depend on any particular argument evaluation order.
支持宽字符(string)和窄字符(wstring)
浮点型数据不能比较

EXPECT_EQ

EXPECT_EQ(val1,val2)
ASSERT_EQ(val1,val2)
验证val1==val2,不相等则出错

EXPECT_NE

EXPECT_NE(val1,val2)
ASSERT_NE(val1,val2)
验证val1 != val2

如果是指针比较,对比的是内存中的地址值,而不是是否有相同的值。
use EXPECT_NE(ptr, nullptr) instead of EXPECT_NE(ptr, NULL)

EXPECT_LT

EXPECT_LT(val1,val2)
ASSERT_LT(val1,val2)
Verifies that val1<val2.

EXPECT_LE

EXPECT_LE(val1,val2)
ASSERT_LE(val1,val2)
Verifies that val1<=val2.

EXPECT_GT

EXPECT_GT(val1,val2)
ASSERT_GT(val1,val2)
Verifies that val1>val2.

EXPECT_GE

EXPECT_GE(val1,val2)
ASSERT_GE(val1,val2)
Verifies that val1>=val2.

字符串比较

这里的字符串比较用于两个C风格的字符串,如果对比两个string对象,使用 EXPECT_EQ or EXPECT_NE
o compare a C string with NULL, use EXPECT_EQ(c_string, nullptr) or EXPECT_NE(c_string, nullptr).

EXPECT_STREQ

EXPECT_STREQ(str1,str2)
ASSERT_STREQ(str1,str2)
Verifies that the two C strings str1 and str2 have the same contents.

EXPECT_STRNE

EXPECT_STRNE(str1,str2)
ASSERT_STRNE(str1,str2)
Verifies that the two C strings str1 and str2 have different contents.

EXPECT_STRCASEEQ

EXPECT_STRCASEEQ(str1,str2)
ASSERT_STRCASEEQ(str1,str2)
Verifies that the two C strings str1 and str2 have the same contents, ignoring case.

EXPECT_STRCASENE

EXPECT_STRCASENE(str1,str2)
ASSERT_STRCASENE(str1,str2)
Verifies that the two C strings str1 and str2 have different contents, ignoring case.

浮点型比较

EXPECT_FLOAT_EQ

EXPECT_FLOAT_EQ(val1,val2)
ASSERT_FLOAT_EQ(val1,val2)
Verifies that the two float values val1 and val2 are approximately equal, to within 4 ULPs from each other.

EXPECT_DOUBLE_EQ

EXPECT_DOUBLE_EQ(val1,val2)
ASSERT_DOUBLE_EQ(val1,val2)
Verifies that the two double values val1 and val2 are approximately equal, to within 4 ULPs from each other.

EXPECT_NEAR

EXPECT_NEAR(val1,val2,abs_error)
ASSERT_NEAR(val1,val2,abs_error)
Verifies that the difference between val1 and val2 does not exceed the absolute error bound abs_error.

显式成功与失败

这种是直接生成成功和失败,代替了表达式或者值。常用在控制流,而不是需要判断boolean的表达式来决定test的成功和失败,举例如下

switch(expression) {
  case 1:
      ....
  case 2:
      ....
  default:
      FATAL() << "We shouldn't get here.";

SUCCEED

SUCCEED()生成一个success,不会有用户可见的输出

FAIL

FAIL()生成一个fatal failure,从当前函数退出,只能用在返回值为void的函数中

ADD_FAILURE

ADD_FAILURE()生成一个nonfatal failure,它会允许当前函数继续执行

ADD_FAILURE_AT

ADD_FAILURE_AT(file_path,line_number) 在一个文件的指定行生成一条nonfatal failure

void test_func1() {
    SUCCEED() << "------------gtest SUCCEED------------";
    ADD_FAILURE() << "----------gtest ADD_FAILURE--------------";
    ADD_FAILURE_AT("/home//iLearning/code/gtest/gtest_project/src/doc.txt", 2) << "--------gtest ADD_FAILURE_AT---------";
}

输出如下:
在这里插入图片描述
结果证明,SUCCEED()没有输出任何信息,ADD_FAILURE()和ADD_FAILURE_AT(file_path,line_number) 都有failure的输出,但ADD_FAILURE_AT并没有在一个文件的指定行生成一条nonfatal failure(不管这个文件在测试程序运行前是否存在)可能是理解错了?

异常断言(未验证)

EXPECT_THROW

EXPECT_THROW(statement,exception_type)
ASSERT_THROW(statement,exception_type)
验证statement会抛出类型为exception_type的异常

EXPECT_ANY_THROW

EXPECT_ANY_THROW(statement)
ASSERT_ANY_THROW(statement)
验证statement会抛出任何类型的异常

EXPECT_NO_THROW

EXPECT_NO_THROW(statement)
ASSERT_NO_THROW(statement)
验证statement不会抛出异常

谓词断言

EXPECT_PRED*

EXPECT_PRED1(pred,val1)
EXPECT_PRED2(pred,val1,val2)
EXPECT_PRED3(pred,val1,val2,val3)
EXPECT_PRED4(pred,val1,val2,val3,val4)
EXPECT_PRED5(pred,val1,val2,val3,val4,val5)

ASSERT_PRED1(pred,val1)
ASSERT_PRED2(pred,val1,val2)
ASSERT_PRED3(pred,val1,val2,val3)
ASSERT_PRED4(pred,val1,val2,val3,val4)
ASSERT_PRED5(pred,val1,val2,val3,val4,val5)
将给定的参数传给谓词pred,如果pred返回true则断言成功,否则失败,如果失败了,它会打印每个参数值。pred是一个函数或者函数对象,可以接受在断言宏中给定的其他参数。

bool MutuallyPrime(int m, int n) {
    if (m > n) {
        return true;
    }
    return false;
}

void test_pred_func1() {
    int a = 3;
    int b = 4;
    int c = 10;
    EXPECT_PRED2(MutuallyPrime, a, b);
    EXPECT_PRED2(MutuallyPrime, c, a);
}

输出如下,断言失败会有打印,成功没有任何输出
在这里插入图片描述
注意:如果谓词是重载函数或者模板函数,断言宏可能无法识别,需要显式指定函数参数类型
重载函数:
IsPositive重载,int和double两个参数,需要如下写法

EXPECT_PRED1(static_cast<bool (*)(int)>(IsPositive), 5);
EXPECT_PRED1(static_cast<bool (*)(double)>(IsPositive), 3.14);

模板函数:

template <typename T>
bool IsNegative(T x) {
  return x < 0;
}
// 需要这样写
ASSERT_PRED2((MyPredicate<int, int>), 5, 0);

EXPECT_PRED_FORMAT*

todo

死亡断言

todo

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

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

相关文章

k8s基础4——deployment控制器、应用部署、升级、回滚、水平扩容缩容

文章目录 一、基本介绍二、应用程序生命周期2.1 部署应用2.2 应用升级2.2.1 修改YAML文件升级&#xff08;交互式&#xff09;2.2.2 命令指定镜像版本升级&#xff08;免交互式&#xff09;2.2.3 调用vim升级 2.3 滚动升级2.3.1 升级流程 2.4 应用回滚2.4.1 查看历史发布版本2.…

yolov5配置错误记录

这里是直接没有找到数据集&#xff0c;说明是路径错误。经过设置yaml后&#xff0c; # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..] path: ../autodl-tmp/datasets/neu # dataset root dir tr…

闲鱼/支付宝 自动收货诈骗套路分析

闲鱼/支付宝 自动收货套路分析 他人闲鱼被骗经历 最近发现闲鱼有一种“自动收货”的套路&#xff0c;就是在闲鱼下单后&#xff0c;卖家发一个二维码&#xff0c;称让你支付运费&#xff0c;该二维码以闲鱼之类的logo为诱惑&#xff0c;让你相信是真的运费支付二维码 正如上文知…

Self-Attention结构细节及计算过程

一、结构 上面那个图其实不是那么重要&#xff0c;只要知道将输入的x矩阵转换成三个矩阵进行计算即可。自注意力结构的输入为 输入矩阵的三个变形 Q&#xff08;query矩阵&#xff09;、K&#xff08;key矩阵&#xff09;、V&#xff08;value矩阵&#xff09;构成&#xff0c;…

Java企业级信息系统02—利用组件注解符精简spring配置文件

文章目录 一、学习目标二、打开01的项目三、利用组件注解符精简spring配置文件&#xff08;一&#xff09;创建新包&#xff0c;复制四个类&#xff08;二&#xff09;修改杀龙任务类&#xff08;三&#xff09;修改救美任务类&#xff08;四&#xff09;修改勇敢骑士类&#x…

Mac安装docker

一、docker是什么&#xff1f; 1、Docker的三个基本概念: Image(镜像)Container(容器)Repository(仓库) Docker的思想来自于集装箱&#xff0c;集装箱解决了什么问题&#xff1f; 在一艘大船上&#xff0c;可以把货物规整的摆放起来。并且各种各样的货物被集装箱标准化了&a…

你还不知道啊,iPhone手机恢复出厂设置的那些事!

案例&#xff1a;手机恢复出厂设置 【友友们&#xff0c;苹果手机想要挂闲鱼&#xff0c;里面有很多隐私。想要恢复出厂设置来清除手机数据&#xff0c;该怎么进行&#xff1f;有什么需要注意的吗&#xff1f;】 iPhone手机想要进行二次销售&#xff0c;我们一般都会采取方法来…

[面试题] 判断二维空间中一点是否在旋转矩形内部

[面试题]&#xff1a;判断二维空间中一点是否在旋转矩形内部 参考&#xff1a; 1. 判断点是否在一个矩形内 2. 向量点乘与叉乘的概念及几何意义 3. 向量叉乘 4. 向量叉乘的正负意义 5. 本工程完整代码 题目描述 已知条件&#xff1a;旋转矩形中心center(x,y), 旋转矩形的长…

asp.net基于web的学生选课成绩管理系统86程序

系统使用Visual studio.net2010作为系统开发环境&#xff0c;并采用ASP.NET技术&#xff0c;使用C#语言&#xff0c;以SQL Server为后台数据库。 本系统主要包含了“登录模块”、“系统用户管理模块”、“课程信息管理模块”、“教师信息管理模块”、“班级信息管理模块”、“…

Word控件Spire.Doc 【打印】教程(2):保打印word文档不显示打印处理对话框

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下&#xff0c;轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具&#xff0c;专注于创建、编辑、转…

对标世界一流|弹性应对“供应链不确定性常态化” ——快消与重资产行业的经验互鉴

1963年&#xff0c;气象学家洛伦兹提出的“蝴蝶效应”表示&#xff1a;“一只蝴蝶在巴西扇动翅膀&#xff0c;有可能会在美国德克萨斯州引起一场龙卷风”。本文希望通过提供快消行业的先进实践&#xff0c;帮助重资产企业从“蝴蝶扇动翅膀”之前就开始行动&#xff0c;避免“龙…

Design principle: Immutability不可变性与对mutable变量的Synchronization方法

不可变性&#xff08;Immutability&#xff09;在设计模式中是指一个对象在创建后其状态就不能改变。这是一种编程思想和设计原则。在某些情况下&#xff0c;使用不变对象可以带来许多好处&#xff1a; 简化代码 make things very simple&#xff1a;不可变对象在创建后状态不会…

【问题排查篇】一次业务问题对 ES 的 cardinality 原理探究 | 京东云技术团队

作者&#xff1a;京东科技 王长春 业务问题 小编工作中负责业务的一个服务端系统&#xff0c;使用了 Elasticsearch 服务做数据存储&#xff0c;业务运营人员反馈&#xff0c;用户在使用该产品时发现&#xff0c;用户后台统计的订单笔数和导出的订单笔数不一致&#xff01; …

21.动态组件 component与keep-alive

目录 1 基本使用 2 按钮切换组件 3 keep-alive 3.1 在切换组件的时候&#xff0c;默认情况下被切换的组件就会被销毁 3.1.1 数据情况 3.1.2 生命周期函数情况 3.2 使用 keep-alive 3.3 keep-alive的生命周期函数 3.4 缓存指定组件 include 3.5 不缓存指定组…

【51单片机】点亮一个LED灯(看开发板原理图十分重要)

&#x1f38a;专栏【51单片机】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【The Right Path】 &#x1f970;大一同学小吉&#xff0c;欢迎并且感谢大家指出我的问题&#x1f970; 目录 &#x1f354;基础内容 &#x1f3f3…

HMS Core 6.10.0版本发布公告

分析服务 ◆ 事件分析下新增商品订阅分析报告&#xff0c;帮助开发者了解应用内用户付费订阅概况&#xff0c;评估订阅付费价值&#xff1b; ◆ 营销分析、用户质量、转化分析以及过滤器中&#xff0c;新增广告系列/广告任务通过ID进行搜索的功能&#xff0c;通过更便捷高效的…

【笔试强训选择题】Day8.习题(错题)解析

作者简介&#xff1a;大家好&#xff0c;我是未央&#xff1b; 博客首页&#xff1a;未央.303 系列专栏&#xff1a;笔试强训选择题 每日一句&#xff1a;人的一生&#xff0c;可以有所作为的时机只有一次&#xff0c;那就是现在&#xff01;&#xff01;&#xff01; 文章目录…

Skywalking

Skywalking skywalking是一个apm系统&#xff0c;包含监控&#xff0c;追踪&#xff0c;并拥有故障诊断能力的 分布式系统 一、Skywalking介绍 1.什么是SkyWalking Skywalking是由国内开源爱好者吴晟开源并提交到Apache孵化器的产品&#xff0c;它同时吸收了Zipkin /Pinpoint …

C语言初阶之常量和变量

常量和变量 什么是常量和变量常量示例 定义变量的方法变量的命名变量的分类示例 变量的使用变量的作用域和生命周期作用域生命周期 结语 什么是常量和变量 在C程序执行过程中&#xff0c;其值不发生改变的量称为常量&#xff0c;其值可变的量称为变量。它们可与数据类型结合起…

BoldReports Embedded Reporting 5.1 Crack

Embed Paginated Reports 嵌入式报告平台&#xff0c;商业智能报告解决方案&#xff0c;探索满足各种业务需求的报告功能&#xff0c;所有功能View Features&#xff0c;像素完美报告&#xff0c;创建像素完美的分页业务报表&#xff0c;随处部署&#xff0c;选择适合您的部署环…