还不知道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. hdu2886 Lou 1 Zhuang 数学/快速幂

    All members of Hulafly love playing the famous network game called 'Lou 1 Zhuang' so much that Super ...

  2. JPI中常使用的类介绍:

    Math类: java.lang包下的 final,不可被继承, 其中的方法和属性都是静态的 其构造方法私有化了,其他类不可以使用构造方法. 向上取整:Math.ceil(double d); 向下取 ...

  3. map遍历的几种方式和效率问题

    一.map遍历的效率 先创建一个map,添加好数据: Map<String, String> map = new HashMap<>();for (int i = 0; i & ...

  4. Go Example--变参函数

    package main import "fmt" func main() { sum(1,2) sum(1,2,3) nums := []int{1,2,3,4} //nums. ...

  5. Linux内核启动分析笔记

    一.驱动加载 1.驱动加载调用关系 start_kernel //init/main.c rest_init //最后执行它 kernel_init //使用kernel_thread创建一个进程执行 ...

  6. Linux内核Inotify机制学习笔记

    一.Inotify简介: Inotify是一种文件变化通知机制,Linux内核从2.6.13开始引入.它是一个内核用于通知用户空间程序文件系统变化的机制.开源社区提出用户态需要内核提供一些机制,以便用 ...

  7. unzip命令

    unzip命令用于解压缩由zip命令压缩的“.zip”压缩包. 语法 unzip(选项)(参数) 选项 -c:将解压缩的结果显示到屏幕上,并对字符做适当的转换: -f:更新现有的文件: -l:显示压缩 ...

  8. Bartender 使用 Excel xlsx 数据库时出现 0x800A0E7A

    Bartender 使用 Excel 数据库时出现 0x800A0E7A 这是因为没有装 数据库驱动的原因. 安装微软的驱动就可以. 注意是安装 32 位的驱动. https://www.micros ...

  9. JavaScript跨浏览器绑定事件函数的优化

    JavaScript作为一门基于事件驱动的语言(特别是用在DOM操作的时候),我们常常需要为DOM绑定各种各样的事件.然而,由于低版本的IE的不给力,在绑定事件和移除事件监听上都与众不同,我们常常需要 ...

  10. Flex Cairngorm框架知识整理

    简介: Cairngorm是一个开源的Flex项目,为FLex提供了一个类似MVC的体系结构框架,它是Flex RIA开发的最好框架之一.使用Cairngorm框架可以大大提高开发和维护的效率. Ca ...