还不知道googletest基本使用方法的请参看前一篇blog  使用googletest进行C++单元测试

本篇仍然使用testStack测试文件进行测试,测试代码如下

#include <gtest/gtest.h>
#include "MyStack.h"
#include <iostream> TEST(StackTest, testPop) {  //StackTest是testcase名,testPop为具体的test
MyStack st;
st.push();
EXPECT_EQ(, st.pop());
} TEST(StackTest, testAll) {  //同一个testcase可以建多个test,不同test之间相互独立
MyStack st;
st.push();
st.push();
int val = st.pop();   // 非致命断言,一个失败仍然会继续后续的
EXPECT_EQ(, val); // 预期val等于28
EXPECT_NE(, val); // 预期val不等于28,fail
EXPECT_GT(, val); // 大于,LE小于等于
EXPECT_TRUE(val==) << "val somehow is not equal to 28"; // 如果失败,可以打印自定义消息 // 字符串检查
EXPECT_STREQ("9 ", st.toString().c_str());  //C风格字符串的比较
EXPECT_STRCASEEQ("9 ", st.toString().c_str()); // 忽略大小写 EXPECT_FLOAT_EQ(7.0, ((float) val)/);
// 两个浮点数几乎相等:相差在4个ULP之内
// ULP: Unit in the Last Place -- 浮点数变量之间的最小间隔
// 例如:   如果,float X; Y = 是大于X的最小浮点数
// 那么,ULP = Y - X;
EXPECT_DOUBLE_EQ(7.0, ((double) val)/);  //double类型
EXPECT_NEAR(6.0, ((float) val)/, ); // 差值小于1 // EXPECT_THROW(st.pop(), std::out_of_range); // 预期st.pop()会抛出一个out_of_range异常
// EXPECT_NO_THROW(st.pop()); // 预期st.pop()会抛一个异常
// EXPECT_NO_THROW(st.pop()); // 预期st.pop()不会抛异常 // 致命断言,如果一个失败,后续的不会再测试
ASSERT_EQ(, val);
ASSERT_GT(, val);
ASSERT_TRUE(val==);
ASSERT_STREQ("", st.toString().c_str()); //fail
ASSERT_STRCASEEQ("9 ", st.toString().c_str()); // 忽略大小写
}

测试后结果如下

当非致命的断言 EXPECT_NE(28, val)失败时,测试并没有终止。

当碰到致命断言ASSERT_STREQ("9", st.toString().c_str())失败时 ,测试终止。

googletest基本测试宏的更多相关文章

  1. GoogleTest死亡测试的跨平台BUG

    最近工作用到了GoogleTest来作单元测试,但是死亡测试的ASSERT_DEATH语句一直跑不通. GoogleTest会启动子进程来运行代码,并捕捉子进程的错误消息,这就是所谓的"死亡 ...

  2. IPv6地址测试宏

  3. GoogleTest环境配置以及应用

    1 GoogleTest源码编译: GoogleTest代码仓库URL: https://github.com/google/googletest.git 下载源代码: git clone --bra ...

  4. Linux文件管理

    虚拟文件系统(VFS)概述: VFS位于文件系统.和访问文件的系统调用(API)之间,为系统调用访问文件系统提供统一的抽象接口. 不同文件系统连接成一个单一树形结构,分别挂载(自己挂载需要用mount ...

  5. Linux进程学习

    进程与进程管理: 清屏:system("clear"); //#include <signal.h> 进程环境与进程属性: 什么是进程:简单的说,进程就是程序的一次执行 ...

  6. GTest Google的一种白盒单元测试框架 开源项目

    GTest为google开源的白盒单元测试跨平台测试框架,含丰富的断言.类型参数化测试.死亡测试.以及其他的测试选项设置.文件保存等,以下将对该项目C++的实现进行简要的分析,作为学习记录备份. 基本 ...

  7. Linux文件和目录

    access() //检查是否调用进程有Access这个文件的权限,如果文件是一个符号链接,会将它解引用,成功返回0,失败返回-1设errno #include <unistd.h> in ...

  8. splice()函数,'SPLICE_F_MOVE' 'SPLICE_F_NONBLOCK' 'SPLICE_F_MORE' undeclared

    1.编译含有splice()函数的程序时出现,'SPLICE_F_MOVE'  undeclared,'SPLICE_F_NONBLOCK' ‘SPLICE_F_MORE' 也是一样undeclare ...

  9. iOS: 实现微信支付

    一.介绍: 现在的消费越来越方便,直接带个手机用各种三方的支付平台进行支付就行,例如微信.支付宝.现在正好我所做的项目中用到了微信支付,今天就来整理一下. 二.准备: 1.去微信官方开发者平台注册开发 ...

随机推荐

  1. WCF 添加服务引用 HTTP 请求已超过为 00:00:00 分配的超时。为此操作分配的时间可能是较长超时

    今天在用公司的笔记本引用WCF的时候,处于一直等待的过程,一直在下载信息,一直等了很长时间,弹出了一个消息 下载“http://ip:8085/xxxxx/xxxxx/mex/$metadata”时出 ...

  2. react 路由跳转问题

    1.采用Link方法跳转 <Link to="/Index2" > 不要用link,回不来,也不能next </Link> 2.用context控制路由跳转 ...

  3. (2)MySQL的增删改查基本操作

    数据库增删改查的基本操作(数据文件在data目录下) 数据库的专业术语 1.文件夹:数据库 2.文件:数据表 指令的注意事项 1.用use的时候指令结尾不需要跟一个分号 ‘:’ 2.如果用show或其 ...

  4. Redis 5.0.0 releases notes

    Redis 5.0 release notes ======================= ---------------------------------------------------- ...

  5. JQuery城市选择

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. benthos v1 的一些新功能

    主要从视频文件截取,暂时github 上还没有很全的相关文档 v1目标 config lint processor error 处理 subprocess processor awk processo ...

  7. 使用ipns 解决ipfs 内容更新的问题

    ipds 可以使用dnslink 解决域名访问的问题,但是内容变更我们就会有新的hashid 解决方法我们可以使用ipns ,同时解决dnslink 解决域名的问题 环境准备 docker-compo ...

  8. 使用patroni 解决hasura graphql-engine pg 数据库ha的问题

    环境准备 机器pg 数据库地址修改为haproxy 的ip地址,端口是haproxy的tcp 端口,配置比较简单 hasura graphql-engine docker-compose versio ...

  9. Oracle12C版本安装步骤

    一.下载路径 http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html file1,file ...

  10. Odoo 开源协议讨论

    Odoo 开源协议讨论 Odoo 9 开始使用的 LGPL 开源协议,所以模块的加密并不会违反 Odoo 的开源协议. 如果使用 Odoo 8 (含)以前的版本开发模块,那么你在分发模块时也必须给使用 ...