GoogleTest测试框架介绍(一)
本系列文章主要介绍 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
首先介绍三个概念:Test、Test Case 和 Test 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测试框架介绍(一)相关推荐
- 乐玩自动化测试模块_五大测试框架介绍,附带全套黑马自动化测试视频教程(完结)...
这个框架需要开发数据表和关键字,这些数据表和关键字独立于执行它们的测试自动化工具,并可以用来"驱动"待测应用程序和数据的测试脚本代码,关键宇驱动测试看上去与手工测试用例很类似. 概述 在自动 ...
- TestNG测试框架介绍整理
TestNG学习 什么是TestNG 添加pom maven依赖 Idea创建module 注解之@BeforeMethod和@AfterMethod 注解之@BeforeClass和@AfterCl ...
- python pytest测试框架介绍四----pytest-html插件html带错误截图及失败重测机制
一.html报告错误截图 这次介绍pytest第三方插件pytest-html 这里不介绍怎么使用,因为怎么使用网上已经很多了,这里给个地址给大家参考,pytest-html生成html报告 今天在这 ...
- 自动化测试===Httprunner测试框架介绍
项目地址: https://github.com/HttpRunner/HttpRunner 中文手册: http://cn.httprunner.org/ 首先是环境搭建: pip install ...
- VSCode使用04--C/C++开发环境的搭建(含googletest测试框架)
1.安装VSCode https://code.visualstudio.com/ 安装中文汉化包 2.安装CMake Linux下的安装 wget https://cmake.org/files/v ...
- CDS测试框架介绍:如何为ABAP CDS Entities写测试
动机 现在大家都知道单元测试对我们代码的好处.并且我们都承认它是开发过程中不可或缺的一部分.但是在把代码切换到数据库的模式下的时候,我们被粗暴地打回了软件测试的黑暗年代...我们现在面临着逻辑下推到A ...
- GoogleTest测试框架搭建方法
欢迎关注公众号「3D视觉工坊」:
- python实时读取日志并打印关键字怎么实现_python pytest测试框架介绍五---日志实时输出...
同样的,在使用pytest进行自动化测试时,需要将实时日志打印出来,而不是跑完后才在报告中出结果. 不过,好在pytest在3.3版本开始,就支持这一功能了,而不用再像nose一样,再去装第三方插件. ...
- python 日志框架_python pytest测试框架介绍五---日志实时输出
同样的,在使用pytest进行自动化测试时,需要将实时日志打印出来,而不是跑完后才在报告中出结果. 不过,好在pytest在3.3版本开始,就支持这一功能了,而不用再像nose一样,再去装第三方插件. ...
- GoogleTest测试C++代码
GoogleTest测试框架基本使用方法: 首先,给出官方文档的链接.以下内容主要是我自己翻译的官方文档并结合自己的理解,总结出的基本要点.如果想要对技术更深入的了解,建议还是去看官方文档.最后说明一 ...
最新文章
- windows 自动化目录大纲(各企业架构不一样,按需选择)
- SpringMVC js如何获取后台model中的属性值
- Android混合推送,MUI框架-推送配置核心代码-个推推送
- Docker 安装MySQL以及外部访问
- 第六天,字典Dictionary
- 工作65:element三级文档多选
- mysql5.7安装
- 快速实现python c扩展模块
- 快速入门丨篇四:如何进行运动控制器与触摸屏通讯?
- 华为面试题之洞穴逃生
- ANSYS_APDL——实例001-模态分析
- 李云龙二次元风格化!
- html正方形符号,HTML特殊字符显示
- 和外国bi相比,国产bi软件更适合中国企业
- 此计算机上无法找到autocad2017,电脑安装cad2017时提示错误:无法定位inf文件怎么办...
- Nature计算社会科学特刊:如何对21世纪人类社会进行有意义的度量?
- 带有反爬虫机制下进行爬取数据方案,这里以阿里拍卖为例
- 基于OP放大器的有源模拟滤波器设计--基础知识
- 薪酬管理助力国有企业数字化人力攻略布局
- 数学建模——拟合方法以及最小二乘优化问题(附黄河小浪底调水调沙例题)
热门文章
- django开发-在Docker中部署django项目
- 基于markdown消息类型实现钉钉报警,让感官更舒服
- TabLayout+ViewPager+Fragment(内部:TabLayout+ViewPager+ Fragment)需要注意!!
- putty连接TPYBord V202开发板教程
- Yii2中如何访问controller的二级目录下的控制器
- Android AIDL远程服务demo
- [LeetCode]41.First Missing Positive
- lecture2-NN结构的主要类型的概述和感知机
- 开源C++项目Google JavaScript引擎V8挑战实录,带你进入V8之旅
- php成长之路--1.composer下载依赖