初识GoogleTest

2023-11-18

1 初识GoogleTest

首先要了解googletest是做什么的,主要是单元测试框架。第二是googletest有什么优势:

  1. 测试过程独立可以重复;
  2. 测试组织与代码结构保持比较好的一致性;
  3. 支持跨平台;
  4. 失败后能够提供完整错误信息,同时支持失败后继续测试其他案例;
  5. 可以自动运行所有套件,测试者更多的关注测试内容;
  6. 支持桩模式,减少测试成本提高测试效率 ;

2 下载和安装

下载地址:

git clone https://github.com/google/googletest.git

安装:

cd googletest
cmake CMakeLists.txt
make
make install

3 实例运行

g++ sample1.cc sample1_unittest.cc -o sample1_unittest -lgtest -lgtest_main -lpthread
./sample1_unittest

这里做下基本的解释:libgtest.a是必须加载的库,主要是进行gtest测试框架的核心API,libgtest_main.a主要是实现了main函数,给没有main函数的代码简化测试过程,包括main函数和初始化等操作。同时google支持多线程操作,下图是 测试结果,整体比较清晰。
在这里插入图片描述

4 整体介绍

4.1 整体目录结构

包含两大组件:分别是googletest和googlemock

-googletest
---docs//操作手册
---googlemock//锚测试组件,它包含了基础测试组件
---googletest//基础测试组件
-----samples//示例涵盖了基本的用法
---lib//生成的静态库文件

4.2 基本语法

4.2.1 断言

布尔比较

这个比较简单,需要注意的是expect可以继续执行下一个用例,assert则是终止测试

EXPECT_TRUE  
EXPECT_FALSE
ASSERT_TRUE 
ASSERT_FALSE
二元比较
EXPECT_EQ //等于判断
EXPECT_NE//不等于判断
EXPECT_LT//小于判断
EXPECT_LE//小于等于判断
EXPECT_GT//大于判断
EXPECT_GE//大于等于判断

4.2.2 函数测试

函数测试用TEST搞定,其中第一个参数是字符串:套件名称自己定;第二个参数是字符串::测试用例自己定。

TEST(FactorialTest, Negative)

4.2.3 类测试

类测试通常基本步骤是,默认构造函数测试,带参数构造,拷贝构造,方法测试四个部分。

TEST(MyString, DefaultConstructor) //默认构造
TEST(MyString, ConstructorFromCString)//参数构造
TEST(MyString, CopyConstructor) //拷贝构造
TEST(MyString, Set) //方法测试

4.2.4 测试夹具

多个类组合测试时会用到夹具测试:需要继承自 testing::Test
其中重写SetUp负责初始化资源;TearDown负责释放资源
TEST_F进行用例测试
同时支持测试用例继承复用

class QueueTestSmpl3 : public testing::Test
{
	 void SetUp() override { ... }//测试前:初始化资源
	 void TearDown() override { ... }//测试后:释放资源
}
//测试
TEST_F(FooTest, Bar) { ... }
//支持复用
class QueueTestSmpl4: public QueueTestSmpl3{
};

4.2.5 测试枚举

主要用于对于具有继承关系的类测试相同的方法。
枚举支持多个类同时测试
TYPED_TEST_SUITE 第一个参数为夹具类;第二参数为枚举类型

typedef Types<OnTheFlyPrimeTable, PreCalculatedPrimeTable> Implementations;
TYPED_TEST_SUITE(PrimeTableTest, Implementations);
//测试
TYPED_TEST(PrimeTableTest, ReturnsFalseForNonPrimes)

4.2.6 事件测试

主要是用于测试中需要增加对于测试前后信息的补充,不采用标准输出,而是自身定义的一些错误信息;在测试比较常用的几个点:单元测试前,单元测试后,套件测试前,套件测试后,用例测试前,用例测试后。
具体操作:首先是继承自EmptyTestEventListener类;第二步是根据需要重写对应函数

class TersePrinter : public EmptyTestEventListener
//单元测试前/后
void OnTestProgramStart(const UnitTest& /* unit_test */) override;
void OnTestProgramEnd(const UnitTest& unit_test) override ;
//套件测试前/后
OnTestSuiteStart(const TestSuite& parameter) override;
void OnTestSuiteEnd(const TestSuite& parameter) override;
//用例测试前/后
void OnTestCaseStart(const TestSuite& parameter) override;
void OnTestCaseEnd(const TestCase& parameter) override;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

初识GoogleTest 的相关文章

  • JAVA 数组(一维数组)

    Java 语言中提供的数组是用来存储固定大小的同类型元素 即存储同种数据类型的多个值 1 声明数组变量和数组初始化 首先必须声明数组变量 才能在程序中使用数组 语法 dataType arrayRefVar 或 dataType array

随机推荐

  • King's Quest【POJ 1904】【Tarjan强连通分量】

    Once upon a time there lived a king and he had N sons And there were N beautiful girls in the kingdom and the king knew
  • CNN,RNN,LSTM区别

    一 CNN 卷积神经网络 在机器学习中 卷积神经网络是一种深度前馈人工神经网络 已成功地应用于图像识别 1 卷积神经网络 是一种前馈神经网络 人工神经元可以响应周围单元 可以进行大型图像处理 卷积神经网络包括卷积层和池化层 卷积神经网络包括
  • 盒子模型大详解

    文档流 网页是一个多层结构 设置样式也是一层一层设置的 最终我们看到的是最上面的那一层 文档流就是网页最底部 我们创建的元素默认都是在文档流中创建的 元素分为两种状态 在文档流 脱离文档流 元素在文档流的特点 块元素 1 独占一行 2 宽是
  • 手机iCloud储存空间已满,怎么解决?

    最近手机总是弹出iCloud储存空间已满 升级的话得花钱 以后再说的话 总感觉有点 不安 担心自己的照片啥的会存不了 所以特意查找了这种方法 如果有出现这种情况的朋友 可以试试 1 找出iCloud空间被哪些档案塞满 iiPhone或iPa
  • Linux之mmv命令批量替换文件名(超详细-python结合mmv)

    文章目录 一 前言 二 各系统安装mmv方法 2 1 CentOS 2 2 Ubuntu And Debain 2 3 MacOS 三 使用方法 3 1 常规使用 3 1 1 常规使用示例 3 2 携带参数使用 3 2 1 携带参数使用示例
  • vue3.x之isRef toRefs isRef readonly 公共数据配置 axios配置 路由配置

    isRef toRefs toRef 参数 源对象 源对象属性 可以用来为源响应式对象上的某个 property 新创建一个 ref 然后 ref 可以被传递 它会保持对其源 property 的响应式连接 也就是说源响应式对象 toRef
  • 3427: Dark roads

    http cs scu edu cn soj problem action id 3427 Description Economic times these days are tough even in Byteland To reduce
  • 向量二范数的求导问题

    现有目标函数 f x 1 2
  • ant design pro 可编辑表格

    import React useRef from react import PageHeaderWrapper from ant design pro layout import ProColumns ActionType TableDro
  • python elif 用法,在Python列表推导中对if / elif语句使用'for'循环

    I am trying to translate this for loop into a list comprehension a 1 2 3 4 5 6 7 8 9 result for i in a if i lt 3 result
  • 数据结构--单链表的插入&删除

    数据结构 单链表的插入 删除 目标 单链表的插入 位插 前插 后插 单链表的删除 单链表的插入 按为序插入 带头结点 ListInsert L i e 插入操作 在表L中的第i个位置上插入指定元素e 思路 找到第i 1个结点 将新结点插入其
  • ElasticSearch学习:ElasticSearch概述

    elasticsearch用于文本搜索的函数库Lucene ElasticSearch是基于此做的封装和增强 ElasticSearch 简称es es是一个开源的高拓展的分布式全文检索引擎 它可以近乎实施的存储 检索数据 本身扩展性很好
  • python代码行末的 \ 符号

    mlm l loss mlm Y hat reshape 1 vocab size mlm Y reshape 1 mlm weights X reshape 1 1 在代码中 是Python中的行继续符号 它用于表示代码行在物理上被分成多
  • 如何开始使用 GitLab 的 CLI 从终端管理 DevOps

    GitLab是面向现代软件交付团队的领先源代码控制和 CI CD 解决方案之一 它提供了一整套用于规划 构建和交付软件项目的功能 GitLab 通常使用其 Web UI 或 API 进行交互 这些选项对于以终端为中心的开发人员来说都不是特别
  • 强化学习笔记(1)-同策回合更新算法

    在我上一篇博客文章https blog csdn net gzroy article details 119509552中对21点的策略进行了研究 采用蒙特卡洛的方式来进行多次的模拟 通过对比不同策略的收益来找到最佳的策略 主要是通过概率的
  • layui的分页实例详解

    原 layui的分页实例详解 2018年09月20日 17 43 07 李什么泽 阅读数 11571 更多 分类专栏 layui分页 版权声明 本文为博主原创文章 遵循 CC 4 0 BY SA 版权协议 转载请附上原文出处链接和本声明 本
  • ndk错误总结

    1 ndk Unresolved inclusion
  • mongo在linux下的安装(实践记录)

    1 下载安装包 wget http fastdl mongodb org linux mongodb linux i686 1 8 2 tgz 下载完成后解压缩压缩包 tar zxf mongodb linux i686 1 8 2 tgz
  • IDEA Cannot resolve plugin org.apache.maven.pluginsmaven-jar-plugin2.4

    起因 最近在弄Maven项目 在使用IDEA创建Maven项目得时候一直报错 搞的我很头疼 网上搜索答案 都是修改Setting xml 配置本地仓库 然后我测试了好多次都不管用 但是根据错误信息他的确是Maven仓库配置得问题和IDEA
  • 初识GoogleTest

    1 初识GoogleTest 首先要了解googletest是做什么的 主要是单元测试框架 第二是googletest有什么优势 测试过程独立可以重复 测试组织与代码结构保持比较好的一致性 支持跨平台 失败后能够提供完整错误信息 同时支持失