本节将会深入一步,了解 gTest 的断言机制。

开始。

1. 我们先从测试代码第一行开始:

TEST(IsPrimeTest, TrueCondition)

宏:

TEST 是一个宏,有两个参数,googtest对其解释为:test_case_name , test_name

EXPECT_TRUE,见字知义,用来比较所传递的参数是否返回 true 。类似的有EXPECT_FALSE。

另:googletest还包装了另一个宏 ASSERT_*, 与EXPECT_* 的区别是:

ASSERT_*版本的断言失败时会产生致命失败,并结束当前函数,后面的语句将不会执行。

EXPECT_*版本的断言产生非致命失败,不会中止当前函数,也就是说,案例继续往下执行。

2. 常用断言如下:

<1>. 基本的true/false条件测试:

Fatal assertion Nonfatal assertion Verifies
ASSERT_TRUE(condition); EXPECT_TRUE(condition); condition is true
ASSERT_FALSE(condition); EXPECT_FALSE(condition); condition is false

<2>. 数值比较 测试:

Fatal assertion Nonfatal assertion Verifies
ASSERT_EQ(expected, actual); EXPECT_EQ(expected, actual); expected == actual
ASSERT_NE(val1, val2); EXPECT_NE(val1, val2); val1 != val2
ASSERT_LT(val1, val2); EXPECT_LT(val1, val2); val1 < val2
ASSERT_LE(val1, val2); EXPECT_LE(val1, val2); val1 <= val2
ASSERT_GT(val1, val2); EXPECT_GT(val1, val2); val1 > val2
ASSERT_GE(val1, val2); EXPECT_GE(val1, val2); val1 >= val2

<3>. 比较两个C字符串(即char*或wchar_t*)测试:

(如果需要比较两个字符串对象,则相应地使用EXPECT_EQ等等)

Fatal assertion Nonfatal assertion Verifies
ASSERT_STREQ(expected_str, actual_str); EXPECT_STREQ(expected_str, actual_str); the two C strings have the same content
ASSERT_STRNE(str1, str2); EXPECT_STRNE(str1, str2); the two C strings have different content
ASSERT_STRCASEEQ(expected_str, actual_str); EXPECT_STRCASEEQ(expected_str, actual_str); the two C strings have the same content, ignoring case
ASSERT_STRCASENE(str1, str2); EXPECT_STRCASENE(str1, str2); the two C strings have different content, ignoring case

<4>. 显示成功或失败(AdvanceGuide):

SUCCEED();
FAIL(); ADD_FAILURE(); ADD_FAILURE_AT("file_path", line_number);

<5>. 异常检查(AdvanceGuide):

Fatal assertion Nonfatal assertion Verifies
ASSERT_THROW(statement, exception_type); EXPECT_THROW(statement, exception_type); statement throws an exception of the given type
ASSERT_ANY_THROW(statement); EXPECT_ANY_THROW(statement); statement throws an exception of any type
ASSERT_NO_THROW(statement); EXPECT_NO_THROW(statement); statement doesn't throw any exception

<6>. 使用已有的布尔型函数:

Fatal assertion Nonfatal assertion Verifies
ASSERT_PRED1(pred1, val1); EXPECT_PRED1(pred1, val1); pred1(val1) returns true
ASSERT_PRED2(pred2, val1, val2); EXPECT_PRED2(pred2, val1, val2); pred2(val1, val2) returns true
... ... ...

<7>. 还可自定义输出格式:

Fatal assertion Nonfatal assertion Verifies
ASSERT_PRED_FORMAT1(pred_format1, val1); EXPECT_PRED_FORMAT1(pred_format1, val1`); pred_format1(val1) is successful
ASSERT_PRED_FORMAT2(pred_format2, val1, val2); EXPECT_PRED_FORMAT2(pred_format2, val1, val2); pred_format2(val1, val2) is successful
... ... ...

<8>. 浮点型检查:

Fatal assertion Nonfatal assertion Verifies
ASSERT_FLOAT_EQ(expected, actual); EXPECT_FLOAT_EQ(expected, actual); the two float values are almost equal
ASSERT_DOUBLE_EQ(expected, actual); EXPECT_DOUBLE_EQ(expected, actual); the two double values are almost equal

两个相近数比较。

Fatal assertion Nonfatal assertion Verifies
ASSERT_NEAR(val1, val2, abs_error); EXPECT_NEAR(val1, val2, abs_error);

the difference between val1 and val2 doesn't exceed

the given absolute error

<9>. Windows HRESULT assertions

Fatal assertion Nonfatal assertion Verifies
ASSERT_HRESULT_SUCCEEDED(expression); EXPECT_HRESULT_SUCCEEDED(expression); expression is a success HRESULT
ASSERT_HRESULT_FAILED(expression); EXPECT_HRESULT_FAILED(expression); expression is a failure HRESULT

总结:

通过以上常用断言总结,我们可以看到,gTest提供了非常丰富的断言来帮助我们更好地执行测试,编写更高效的自动化测试代码。

转载于:https://www.cnblogs.com/way_testlife/archive/2010/10/18/1854908.html

Google C++ Testing Framework之断言相关推荐

  1. [gtest][001] A quick introduction to the Google C++ Testing Framework

    前言:这是一篇非常好的介绍谷歌测试框架基本知识的文章.我们知道谷歌在提供开源的模块的时候,往往都附带提供了相应的测试案例.例如浏览器的移植工作,理解这些测试案例,比如unit test案例是很重要的事 ...

  2. Google Mock启蒙篇 [2] (Google C++ Mocking Framework for Dummies 翻译)

    Setting Expectations 成功地使用Mock对象的关键是在它上面设置合适的期望.如果你设置的期望太过严格,你的测试可能会因为无关的改变而失败.如果你把期望设置的太过松驰,bugs可能会 ...

  3. Google Mock启蒙篇 [1] (Google C++ Mocking Framework for Dummies 翻译)

    Google C++ Mocking Framework for Dummies Google Mock启蒙篇 Version: 0.07< xmlnamespace prefix =" ...

  4. What Is Google C++ Mocking Framework?

    (Note: If you get compiler errors that you don't understand, be sure to consult Google Mock Doctor.) ...

  5. C++ Testing Framework

    C++ Testing Framework C++ Testing Framework测试框架使用 链接:https://www.ibm.com/developerworks/cn/aix/libra ...

  6. [gtest][002] A quick start to build the Google C++ Testing project

    前言:上一篇谷歌的测试的框架,大致介绍了测试的框架的基本情况.这一节,讲述如何构建一个真正的自动化测试项目: 注意,文章最后一部分有一个视频,这个视频是一步一步构建谷歌测试案例,值得仔细研究. Uni ...

  7. 4.6、robot framework所有断言操作

    1.Should (Not) Be Empty:断言是否为空 2.Should (Not) Be Equal:断言是否相等[断言成功则通过,失败则fail.可以通过msg自定义提示信息] 3.Shou ...

  8. websecurity - Web Security Testing Framework 超级牛B扫描器

    Windows – Websecurify 0.3.exe http://websecurify.googlecode.com/files/Websecurify%200.3.exe Linux – ...

  9. testing framework

    actor python actor.py --ip 192.168.4.6 --num_replicas 12 learner python learner python learner --poo ...

最新文章

  1. 查询liunx上磁盘占用情况
  2. 自定义状态栏notification布局
  3. HttpClientFactory的套路,你知多少?
  4. 计算机基础知识菜鸟教程,机器学习基础知识整理归纳
  5. POJ 1222 1681 1830 3185 开关灯问题 (高斯消元 异或方程组)
  6. Spring Boot 2.2版本变化[翻译]
  7. Duplicate interface definition for class
  8. Spring Boot中使用@Scheduled创建定时任务
  9. 虚拟机可以识别usb无线网卡,但一直提示设备正在运行中--解决方法
  10. CoinDesk将发布2018年比特币和区块链行业报告
  11. 程序员想创业首先要突破自己三关(转)
  12. 小程序商店刷榜_微信小程序店铺如何做引流,带来转化?
  13. 关于U盘被写保护无法格式化的解决方法
  14. Markdown中设置图片尺寸及添加图注
  15. mapbox创建空白底图
  16. Basic认证方式的配置
  17. Transformer + RL:是强化学习魔高一尺,还是 Transformer 道高一丈? (1)
  18. (co-,contra-,in-)variance in Scala, what is [+-A]
  19. metasploit简单使用:复现永恒之蓝
  20. Android之查看Wifi密码

热门文章

  1. Docker 安装Centos,Tomcat,Jdk等相关的自定义(Dockerfile)镜像
  2. 多版本号并发控制(MVCC)在实际项目中的应用
  3. 【翻译】如何在Ext JS 6中使用Fashion美化应用程序
  4. clone方法是如何工作的
  5. QOS之NBAR 下
  6. 轻松提取und文件加密内容,破解X-文件锁
  7. 新奇漂亮的Ajax/CSS表格设计汇集
  8. 问题 F: 编写函数:一维数组的逆序 (Append Code)
  9. db2 linux 导入数据_实现DB2数据库迁移之导入步骤在Linux下
  10. 波卡生态项目Polkalokr将在Polkastarter进行IDO