Googletest入门

来源:https://github.com/google/googletest/blob/master/googletest/docs/primer.md

P.S. gmock作为gtest的孪生兄弟,其通俗介绍可以看这篇:https://blog.csdn.net/wangjingqi930330/article/details/80525056

简介:为啥用googletest

用googletest是为了写更好的测试代码

googletest是谷歌专门的测试框架团队开发的,跨平台,支持各种类型的测试。

理念:

  1. 测试应当具备独立性可重复性
  2. 良好的组织
  3. 可移植可重用
  4. 如果fail则提供尽可能多的信息
  5. 让用户专注于测试内容,避免做“家务活”
  6. 用起来快,不同的test之间相互共享着用,稍微改一下就能跑

术语说明

International Software Testing Qualifications Board (ISTQB)用的术语,和googletest里不一样。

ISTQB/课本 GoogleTest老版本 GoogleTest新版本
Test Suite Test Case TestSuite
Test Case Test Test

基本概念

Assertions

使用ASSERT_XXX()EXPECT_XXX()来执行测试。

ASSERT_EQ()来确保结果一致,不一致就停止。

EXPECT_EQ()来检查结果一致,不一致的话依然继续执行,但是给出提示。

ASSERT_EQ()EXPECT_EQ()都可以制作流,因此可以接一个<<"message"来作为提示。

可用宏列表

  • ASSERT_TRUE

  • ASSERT_FALSE

  • ASSERT_EQ

  • ASSERT_NE: 不等于

  • ASSERT_GT: >

  • ASSERT_LE: <=

  • ASSERT_LT: <

  • ASSERT_GE: >=

  • ASSERT_STREQ:字符串相等

  • ASSERT_STRNE:字符串不等

  • ASSERT_STRCASEEQ:不考虑大小写时相等

  • ASSERT_STRCASENE:不考虑大小写是不等

  • EXPECT_TRUE

  • EXPECT_FALSE

  • EXPECT_EQ

  • EXPECT_NE: 不等于

  • EXPECT_GT: >

  • EXPECT_LE: <=

  • EXPECT_LT: <

  • EXPECT_GE: >=

  • EXPECT_STREQ:字符串相等

  • EXPECT_STRNE:字符串不等

  • EXPECT_STRCASEEQ:不考虑大小写时相等

  • EXPECT_STRCASENE:不考虑大小写是不等

简单的测试写法

TEST(TestSuiteName, TestName){
...
}

其中TestSuiteNameTestName必须是不含"_"的标志符。

复杂一点,还可以用TEST_F,感觉有点复杂,和TEST的区别可以看看这篇:https://blog.csdn.net/carolzhang8406/article/details/54668462

GoogleTest入门的更多相关文章

  1. 【C++】GoogleTest入门指南

    参考: GoogleTest官网 基本概念 要使用GoogleTest,需要包含header gtest/gtest.h 断言Assertions 断言是检查条件是否为真的语句,其结果可能是成功或失败 ...

  2. GoogleTest 之路2-Googletest 入门(Primer)

    Why googletest? 为啥要用GoogleTest呢? googletest 是由测试技术Team 开发的带有google 特殊的需求和限制的测试框架. 不管你在什么平台上写C++代码,go ...

  3. Google C++单元测试框架GoogleTest(总)

    之前一个月都在学习googletest框架,对googletest的文档都翻译了一遍,也都发在了之前的博客里,另外其实还有一部分的文档我没有发,就是GMock的CookBook部分:https://g ...

  4. VScode 使用 CMake 入门

    参考 CMake 入门实战 在 linux 平台下使用 CMake 生成 Makefile 并编译的流程如下: 编写 CMake 配置文件 CMakeLists.txt . 执行命令 cmake PA ...

  5. 【C++】GoogleTest进阶之gMock

    gMock是什么 当我们去写测试时,有些测试对象很单纯简单,例如一个函数完全不依赖于其他的对象,那么就只需要验证其输入输出是否符合预期即可. 但是如果测试对象很复杂或者依赖于其他的对象呢?例如一个函数 ...

  6. Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求

    上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...

  7. ABP入门系列(1)——学习Abp框架之实操演练

    作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...

  8. Oracle分析函数入门

    一.Oracle分析函数入门 分析函数是什么?分析函数是Oracle专门用于解决复杂报表统计需求的功能强大的函数,它可以在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计 ...

  9. Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数

    上一篇:Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数 之前介绍了简单的路由以及传参,这篇文章我们将要学习复杂一些的路由以及传递其他附加参数.一个好的路由系统可以使我们 ...

随机推荐

  1. 在Apache Struts中利用OGNL注入

    前言 本文简要介绍了Apache Struts的OGNL注入缺陷,文章中介绍使用简单的应用程序复现OGNL注入.深入研究针对公共漏洞,并理解这类漏洞. 内容 安装Apache Tomcat服务器(入门 ...

  2. mysql使用group_by

    GROUP BY必须得配合聚合函数来用,分组之后你可以计数(COUNT),求和(SUM),求平均数(AVG)等 常用聚合函数 count() 计数 sum() 求和 avg() 平均数 max() 最 ...

  3. python3+requests库框架设计04-配置文件

    python3配置文件的增删改查等操作可以使用内置的ConfigParser模块,可以自行百度学习,也可以看Python3学习笔记27-ConfigParser模块 配置文件一般存放着环境信息,比如u ...

  4. 【转】vector中erase()的使用注意事项

    vector::erase():从指定容器删除指定位置的元素或某段范围内的元素 vector::erase()方法有两种重载形式 如下: iterator erase(   iterator _Whe ...

  5. HDU contest808 ACM多校第7场 Problem - 1008: Traffic Network in Numazu

    首先嘚瑟一下这场比赛的排名:59 (第一次看到这么多 √ emmmm) 好了进入正文QAQ ...这道题啊,思路很清晰啊. 首先你看到树上路径边权和,然后还带修改,不是显然可以想到 树剖+线段树 维护 ...

  6. 子元素position:absolute定位之后脱离文档流,怎么使子元素撑开父元素

    纯粹的CSS无法实现.因为position:absolute就是脱离文档流,怎么能让父元素不塌陷呢? 目前想到的只能用js和jquery来实现了,用js获取子元素的高度,赋值给父元素. <!DO ...

  7. heidiSQL使用简介

    2017年12月5日09:49:42 星期二 HeidiSQL下载链接 1. 这个是免费的, 不用辛苦找破解码了, 也不用担心被破解软件装后门 2. 可以一次执行多条SQL语句分开选项卡显示 3. 可 ...

  8. Golang 类型转换,断言和显式强制转换

    1 前言 类型转换,可以用断言(只能使用在interface{}类型转换成其它类型)和显式类型强制转换(常规是用于基本类型) 2 代码 //graphql-go func(params graphql ...

  9. Django 笔记(三)模版路径 ~ 静态引用

    1.模版路径: 在 settings,py 里的 TEMPLATES = [] 内添加一句代码拼接路径 'DIRS': [os.path.join(BASE_DIR, 'templates')] 有两 ...

  10. 自定义redis连接池(字典操作)

    pool=redis.ConnectionPool(host='127.0.0.1', port=6379,max_connections=1000)conn=redis.Redis(connecti ...