本系列文章主要介绍 GoogleTest(也称“GTest”)测试框架的相关知识,同时通过一些示例程序介绍 GoogleTest 测试框架的使用方法。

本文为系列文章的第一篇,主要介绍 GoogleTest 测试框架的相关知识。

1 Why GoogleTest

此处引用 GitHub 上对于 GoogleTest 的介绍:

googletest helps you write better C++ tests.

googletest is a testing framework developed by the Testing Technology team with Google's specific requirements and constraints in mind. No matter whether you work on Linux, Windows, or a Mac, if you write C++ code, googletest can help you. And it supports any kind of tests, not just unit tests.

2 相关知识

2.1 Test、Test Case和Test Suite

首先介绍三个概念:TestTest CaseTest Suite

这三者在某些场景下容易混淆。

由于某些历史原因,GoogleTest 使用 Test Case 来将相关的 Test 归为一组,然而,当前 ISTQB(International Software Testing Qualifications Board) 和很多关于软件质量书籍都使用 Test Suite 替换 Test Case;而 GoogleTest 中的 Test 则对应 ISTQB 的 Test Case。总结起来,即下表内容:

Meaning GoogleTest Term ISTQB Term
Exercise a particular program path with specific input values and verify the results TEST() Test Case
A set of several tests related to one component Test Case Test Suite

2.2 基本概念

使用 GoogleTest,最先写的就是断言(assertion)。断言是一种检查某个条件是否为真的描述。断言的结果可以是成功、非致命失败、致命失败。当致命失败发生时,当前函数将会终止;而断言的其他结果则不会有此效果。

Test 使用断言来判断测试代码的行为:如果一个 Test 崩溃了或者出现了一个失败的断言,则该 Test 就失败了;反之,它就是成功的。

Test Case 包括一个或多个 Test。我们应当把 Test 打包、分组,放入 Test Case 中,以便测试代码的结构更加清晰。当一个 Test Case 中的多个 Test 需要共享对象和子程序时,我们可以把这些共享内容放入一个(test fixture)类中。

一个测试程序可以包含多个 Test Case

2.3 断言(assertion)

GoogleTest 的断言是类似函数调用的宏。

我们可以通过编写相关的断言,来测试类或函数的行为。如果断言失败了,GoogleTest 将打印该断言的源文件及行号信息,以及该失败信息。我们也可以定制 GoogleTest 的失败信息。

当前,有两种断言可供我们使用:

  • ASSERT_* :当断言失败时,产生致命错误,并终止当前函数;
  • EXPECT_* :当断言失败时,产生非致命错误,并且不会终止当前函数。

通常,我们都会选择 EXPECT_*,因为它能让我们在一次测试中测试出更多的失败情况。不过,如果我们想要在出现失败的测试时立即终止程序,则要选择 ASSERT_*。

注意:因为 ASSERT_* 会在失败时立即终止函数,那么就可能跳过后面程序中进行清理工作的代码,由此可能会产生内存泄露。所以我们在使用 ASSERT_* 时,要留心检查堆内存,防止内存泄露。

一些常见的断言语句如下:

【基本断言】:

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

【二元断言】:

Fatal assertion Nonfatal assertion Verifies
ASSERT_EQ(val1, val2); EXPECT_EQ(val1, val2); val1 == val2
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

【字符串断言】:

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

关于 GoogleTest 的用法示例,请点击此处。

GoogleTest测试框架介绍(一)相关推荐

  1. 乐玩自动化测试模块_五大测试框架介绍,附带全套黑马自动化测试视频教程(完结)...

    这个框架需要开发数据表和关键字,这些数据表和关键字独立于执行它们的测试自动化工具,并可以用来"驱动"待测应用程序和数据的测试脚本代码,关键宇驱动测试看上去与手工测试用例很类似. 概述 在自动 ...

  2. TestNG测试框架介绍整理

    TestNG学习 什么是TestNG 添加pom maven依赖 Idea创建module 注解之@BeforeMethod和@AfterMethod 注解之@BeforeClass和@AfterCl ...

  3. python pytest测试框架介绍四----pytest-html插件html带错误截图及失败重测机制

    一.html报告错误截图 这次介绍pytest第三方插件pytest-html 这里不介绍怎么使用,因为怎么使用网上已经很多了,这里给个地址给大家参考,pytest-html生成html报告 今天在这 ...

  4. 自动化测试===Httprunner测试框架介绍

    项目地址: https://github.com/HttpRunner/HttpRunner 中文手册: http://cn.httprunner.org/ 首先是环境搭建: pip install ...

  5. VSCode使用04--C/C++开发环境的搭建(含googletest测试框架)

    1.安装VSCode https://code.visualstudio.com/ 安装中文汉化包 2.安装CMake Linux下的安装 wget https://cmake.org/files/v ...

  6. CDS测试框架介绍:如何为ABAP CDS Entities写测试

    动机 现在大家都知道单元测试对我们代码的好处.并且我们都承认它是开发过程中不可或缺的一部分.但是在把代码切换到数据库的模式下的时候,我们被粗暴地打回了软件测试的黑暗年代...我们现在面临着逻辑下推到A ...

  7. GoogleTest测试框架搭建方法

    欢迎关注公众号「3D视觉工坊」:

  8. python实时读取日志并打印关键字怎么实现_python pytest测试框架介绍五---日志实时输出...

    同样的,在使用pytest进行自动化测试时,需要将实时日志打印出来,而不是跑完后才在报告中出结果. 不过,好在pytest在3.3版本开始,就支持这一功能了,而不用再像nose一样,再去装第三方插件. ...

  9. python 日志框架_python pytest测试框架介绍五---日志实时输出

    同样的,在使用pytest进行自动化测试时,需要将实时日志打印出来,而不是跑完后才在报告中出结果. 不过,好在pytest在3.3版本开始,就支持这一功能了,而不用再像nose一样,再去装第三方插件. ...

  10. GoogleTest测试C++代码

    GoogleTest测试框架基本使用方法: 首先,给出官方文档的链接.以下内容主要是我自己翻译的官方文档并结合自己的理解,总结出的基本要点.如果想要对技术更深入的了解,建议还是去看官方文档.最后说明一 ...

最新文章

  1. windows 自动化目录大纲(各企业架构不一样,按需选择)
  2. SpringMVC js如何获取后台model中的属性值
  3. Android混合推送,MUI框架-推送配置核心代码-个推推送
  4. Docker 安装MySQL以及外部访问
  5. 第六天,字典Dictionary
  6. 工作65:element三级文档多选
  7. mysql5.7安装
  8. 快速实现python c扩展模块
  9. 快速入门丨篇四:如何进行运动控制器与触摸屏通讯?
  10. 华为面试题之洞穴逃生
  11. ANSYS_APDL——实例001-模态分析
  12. 李云龙二次元风格化!
  13. html正方形符号,HTML特殊字符显示
  14. 和外国bi相比,国产bi软件更适合中国企业
  15. 此计算机上无法找到autocad2017,电脑安装cad2017时提示错误:无法定位inf文件怎么办...
  16. Nature计算社会科学特刊:如何对21世纪人类社会进行有意义的度量?
  17. 带有反爬虫机制下进行爬取数据方案,这里以阿里拍卖为例
  18. 基于OP放大器的有源模拟滤波器设计--基础知识
  19. 薪酬管理助力国有企业数字化人力攻略布局
  20. 数学建模——拟合方法以及最小二乘优化问题(附黄河小浪底调水调沙例题)

热门文章

  1. django开发-在Docker中部署django项目
  2. 基于markdown消息类型实现钉钉报警,让感官更舒服
  3. TabLayout+ViewPager+Fragment(内部:TabLayout+ViewPager+ Fragment)需要注意!!
  4. putty连接TPYBord V202开发板教程
  5. Yii2中如何访问controller的二级目录下的控制器
  6. Android AIDL远程服务demo
  7. [LeetCode]41.First Missing Positive
  8. lecture2-NN结构的主要类型的概述和感知机
  9. 开源C++项目Google JavaScript引擎V8挑战实录,带你进入V8之旅
  10. php成长之路--1.composer下载依赖