GoogleTest初探(1)
此篇主要了解一下GoogleTest中的断言。
总的来说,GoogleTest中的断言分为两大类:EXPECT_*和ASSERT_*,这两者在测试成功或失败后均会给出测试报告,区别是前者在测试失败后会继续执行下面的测试,而后者在测试失败后会立即终止测试。
GoogleTest中的比较断言,涉及整型,字符串, 浮点型,布尔型的比较判断
| Fatal assertion | Nonfatal assertion | Verifies |
| ASSERT_TRUE(condition) | EXPECT_TRUE(condition) | condition == true |
| ASSERT_TRUE(condition) | EXPECT_FALSE(condition) | condition == false |
| ASSERT_EQ(expected, actual) | EXPECT_EQ(expected, actual) | expected == actual |
| ASSERT_NE(val1, val2) | EXPECT_NE(val1, val2) | val1 != val2 |
| ASSERT_LE(val1, val2) | EXPECT_LE(val1, val2) | val1 <= val2 |
| ASSERT_LT(val1, val2) | EXPECT_LT(val1, val2) | val1 < val2 |
| ASSERT_GE(val1, val2) | EXPECT_GE(val1, val2) | val1 >= val2 |
| ASSERT_GT(val1, val2) | EXPECT_GT(val1, val2) | val1 > val2 |
| ASSERT_STREQ(expected, actual) | EXPECT_STREQ(expected, actual) | (C-string) expected == actual |
| ASSERT_STRNE(s1, s2) | EXPECT_STRNE(s1, s2) | (C-string) s1 != s2 |
| ASSERT_STRCASEEQ(s1, s2) | EXPECT_STRCASEEQ(s1, s2) | (C-string) s1 == s2 ignoring case |
| ASSERT_STRCASENE(s1, s2) | EXPECT_STRCASENE(s1, s2) | (C-string) s1 != s2 ignoring case |
| ASSERT_FLOAT_EQ(expected, actual) | EXPECT_FLOAT_EQ(expected, actual) | (float) expected == actual |
| ASSERT_DOUBLE_EQ(expected, actual) | EXPECT_DOUBLE_EQ(expected, actual) | (double) expected == actual |
| ASSERT_NEAR(val1, val2, abs_error) | EXPECT_NEAR(val1, val2, abs_error) | abs(val1-val2) <= abs_error |
异常断言:
| 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 |
几个特殊的断言(可用于流程控制)
| SUCCEED() | 一个成功断言 |
| FAIL() | 一个失败断言(fatal failure) |
| ADD_FAILURE() | 一个失败断言(nonefatal failure) |
| ADD_FAILURE_AT(file, line) | 在给定的文件的给定行数生成一个失败断言(nonefatal failure) |
对于一些待测试的,返回值为bool变量的函数,可以使用以下的断言(n代表参数个数):
| Fatal assertion | Nonfatal assertion | Verifies |
| ASSERT_PREDn(predn, val1,...); | EXPECT_PREDn(predn, val1,...); | predn(val1,...) is true |
另外,可以对测试函数进行一个包装,使用以下断言来判断包装好的函数:
| Fatal assertion | Nonefatal assertion | Verifies |
| ASSERT_PRED_FORMATn(pred_formatn, val1, ...); | EXPECT_PRED_FORMATn(pred_formatn, val1, ...); | pred_formatn(val1, ...) is successful |
要求pred_formatn的返回值是AssertionResult, 例子如下:
// Returns true if m and n have no common divisors except 1.
bool MutuallyPrime(int m, int n) { ... } // Returns the smallest prime common divisor of m and n,
// or 1 when m and n are mutually prime.
int SmallestPrimeCommonDivisor(int m, int n) { ... } // A predicate-formatter for asserting that two integers are mutually prime.
::testing::AssertionResult AssertMutuallyPrime(const char* m_expr,
const char* n_expr,
int m,
int n)
{
if (MutuallyPrime(m, n)) return ::testing::AssertionSuccess(); return ::testing::AssertionFailure() << m_expr << " and " << n_expr
<< " (" << m << " and " << n << ") are not mutually prime, "
<< "as they have a common divisor " << SmallestPrimeCommonDivisor(m, n);
}
使用一个AssertMutuallyPrime函数来包装一下待测试函数MutuallyPrime。此时再使用断言:
EXPECT_PRED_FORMAT2(AssertMutuallyPrime, b, c);
如果失败,则会打印出失败信息
b and c ( and ) are not mutually prime, as they have a common divisor .
还有类型断言:
::testing::StaticAssertTypeEq<T1, T2>();
使用这个函数可以判断T1和T2类型是否一致
最后,可以使用gmock中的各种matchers来进行断言:
| Fatal assertion | Nonfatal assertion | Verifies |
| ASSERT_THAT(value, matcher); | EXPECT_THAT(value, matcher); | value matches matcher |
matchers 见gmock 的介绍
参考链接:https://github.com/google/googletest/blob/master/googletest/docs/advanced.md
GoogleTest初探(1)的更多相关文章
- GoogleTest初探(2)
前面的随笔介绍了Google Test中的基本测试单元TEST和测试夹具TEST_F,此篇介绍区别于这两种测试的参数化测试TEST_P 当待测试方法的行为取决于传入的参数时,而且这些参数的不同组合有多 ...
- GoogleTest初探(0)
单元测试是一种保证代码质量的手段.程序员可以通过写单元测试来保证自己写的代码的功能正确. 本人所在公司使用GoogleTest测试框架来进行单元测试.虽然现在在公司的工程代码中写单元测试已经驾轻就熟, ...
- 初探领域驱动设计(2)Repository在DDD中的应用
概述 上一篇我们算是粗略的介绍了一下DDD,我们提到了实体.值类型和领域服务,也稍微讲到了DDD中的分层结构.但这只能算是一个很简单的介绍,并且我们在上篇的末尾还留下了一些问题,其中大家讨论比较多的, ...
- CSharpGL(8)使用3D纹理渲染体数据 (Volume Rendering) 初探
CSharpGL(8)使用3D纹理渲染体数据 (Volume Rendering) 初探 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharpGL源码 ...
- 从273二手车的M站点初探js模块化编程
前言 这几天在看273M站点时被他们的页面交互方式所吸引,他们的首页是采用三次加载+分页的方式.也就说分为大分页和小分页两种交互.大分页就是通过分页按钮来操作,小分页是通过下拉(向下滑动)时异步加载数 ...
- JavaScript学习(一) —— 环境搭建与JavaScript初探
1.开发环境搭建 本系列教程的开发工具,我们采用HBuilder. 可以去网上下载最新的版本,然后解压一下就能直接用了.学习JavaScript,环境搭建是非常简单的,或者说,只要你有一个浏览器,一个 ...
- .NET文件并发与RabbitMQ(初探RabbitMQ)
本文版权归博客园和作者吴双本人共同所有.欢迎转载,转载和爬虫请注明原文地址:http://www.cnblogs.com/tdws/p/5860668.html 想必MQ这两个字母对于各位前辈们和老司 ...
- React Native初探
前言 很久之前就想研究React Native了,但是一直没有落地的机会,我一直认为一个技术要有落地的场景才有研究的意义,刚好最近迎来了新的APP,在可控的范围内,我们可以在上面做任何想做的事情. P ...
- Google C++单元测试框架GoogleTest(总)
之前一个月都在学习googletest框架,对googletest的文档都翻译了一遍,也都发在了之前的博客里,另外其实还有一部分的文档我没有发,就是GMock的CookBook部分:https://g ...
随机推荐
- android 每个块半径不同的扇形图,自定义view
1.首先看效果图 2.自定义PieChartView,继承自View,下边为PieChartView代码 package com.yingjinbao.im.peach.customview; imp ...
- 鉴别JS数据类型的全套方法
ECMAScript 标准定义了 7 种数据类型:Boolean.Null.Undefined.Number.String.Symbol(ES6新增)和Object,除Object以外的那6种数据类型 ...
- zookeeper应用 - FIFO 队列 分布式队列
使用ZooKeeper实现的FIFO队列,这个队列是分布式的. package fifo; import java.util.Collections; import java.util.List; i ...
- 记开发个人图书收藏清单小程序开发(三)DB设计
主要是参考豆瓣的图书查询接口: https://api.douban.com/v2/book/isbn/:9780132350884 返回内容如下: { "rating": { & ...
- UNIX高级环境编程(4)Files And Directories - umask、chmod、文件系统组织结构和链接
本篇主要介绍文件和文件系统中常用的一些函数,文件系统的组织结构和硬链接.符号链接. 通过对这些知识的了解,可以对Linux文件系统有更为全面的了解. 1 umask函数 之前我们已经了解了每个文件 ...
- linux centos6.5 网络配置
1.方法一.修改网络配置文件 ①cd /etc/sysconfig/network-scripts ②cp ifcfg-eth0 ./ifcfg-eth0.bak //修改前先备份 第一个以太网 ...
- mysql 8.0.11 安装(windows)
mysql本地安装(windows) 一.安装包下载 从官网下载安装包,地址:https://dev.mysql.com/downloads/mysql/ 二.配置 解压到本地,然后在目录下新建my. ...
- Linux mount命令详解
mount命令用于加载文件系统到指定的加载点.此命令的也常用于挂载cdrom,使我们可以访问cdrom中的数据,因为你将光盘插入cdrom中,Linux并不会自动挂载,必须使用Linux mount命 ...
- CDN高级技术专家周哲:深度剖析短视频分发过程中的用户体验优化技术点
深圳云栖大会已经圆满落幕,在3月29日飞天技术汇-弹性计算.网络和CDN专场中,阿里云CDN高级技术专家周哲为我们带来了<海量短视频极速分发>的主题分享,带领我们从视频内容采集.上传.存储 ...
- LinkedHashSet 元素唯一,存储取出有序
package cn.itcast_04; import java.util.LinkedHashSet; /* * LinkedHashSet:底层数据结构由哈希表和链表组成. * 哈希表保证元 ...