【仿RabbitMQ消息队列项目day4】GTest测试框架使用

一.什么是GTest?

GTest是一个跨平台的 C++单元测试框架,由google公司发布。gtest是为了在不同平台上为编写C++单 元测试而生成的。

二.使用

TEST(test_case_name, test_name):主要用来创建⼀个简单测试, 它定义了一个测试函数, 在这个函数中可以使⽤任何C++代 码并且使用框架提供的断言进行检查

TEST_F(test_fixture,test_name):主要用来进行多样测试,适用于多个测试场景如果需要相同的数据配置的情况, 即相同 的数据测不同的行为

1.宏断言

gtest的宏断言分为两类:

ASSERT_系列:如果当前点检测失败则退出当前函数 

EXPECT_系列:如果当前点检测失败则继续往下执行

// bool值检查
ASSERT_TRUE(参数),期待结果是true
ASSERT_FALSE(参数),期待结果是false
//数值型数据检查
ASSERT_EQ(参数1,参数2),传⼊的是需要⽐较的两个数 equal
ASSERT_NE(参数1,参数2),not equal,不等于才返回true
ASSERT_LT(参数1,参数2),less than,⼩于才返回true
ASSERT_GT(参数1,参数2),greater than,⼤于才返回true
ASSERT_LE(参数1,参数2),less equal,⼩于等于才返回true
ASSERT_GE(参数1,参数2),greater equal,⼤于等于才返回true
#include <iostream>
#include <gtest/gtest.h>
using std::cout;
using std::endl;

/*
    断言宏的使用 
        ASSERT_  断言失败则退出
        EXPECT_  断言失败继续运行
    注意:
        断言宏,必须在单元测试宏函数中使用
*/

//Test1是测试套件名称,greater和less是测试用例名称,测试套件Test1包含greater和less两个测试用例
TEST(Test1, greater)
{
    int age = 20;
    EXPECT_GT(age, 20);
    cout << "测试完毕" << endl; 
}

TEST(Test1, less)
{
    int age = 20;
    EXPECT_LE(18, 20);
    cout << "测试完毕" << endl;
}

TEST(Test2, greater)
{
    int age = 20;
    EXPECT_GT(age, 20);
    cout << "测试完毕" << endl; 
}

TEST(Test2, less)
{
    int age = 20;
    EXPECT_LE(18, 20);
    cout << "测试完毕" << endl;
}

int main(int argc, char* argv[])
{
    //将命令⾏参数传递给gtest
    testing::InitGoogleTest(&argc, argv);

    //运行所有测试
    RUN_ALL_TESTS();
    return 0;
}

2.事件机制

(1)什么是事件机制

测试框架:

GTest中的事件机制是指在整个测试的前和后,测试套件的前和后,以及测试用例的前和后,提供给用户自行添加操作的机制。

事件机制的最大好处就是,能够为我们的测试提前准备好测试环境,并在测试完毕后销毁环 境,使得测试更加灵活

(2)事件分类 

GTest提供的事件有以下三类:

全局事件:针对整个测试程序,整个测试前后会触发该事件

TestSuit(套件)事件:针对一个测试套件,测试套件测试前后会触发该事件

TestCase(用例)事件,针对一个测试用例,测试用例测试前后会触发该事件

 (3)事件的实现方法

GTest中的事件都是通过定义类中的方法来实现的,由于事件给测试提供了测试环境,我们不妨将这样的类叫做测试环境类。

实现全局事件——重写SetUp和TearDown

实现一个类,继承testing::Environment,然后重写SetUp和TearDown方法,最后在测试开始前调用testing::AddGlobalTestEnvironment方法注册该全局环境类。

实现TestSuit事件——实现SetUpTestCase(静态)TearDownTestCase(静态)

实现一个类,继承testing::Test,实现SetUpTestCase和TearDownTestCase静态方法。

注意:要使用TEST_F定义测试函数,测试套件名称必须和类名一致,这样才能将测试套件和环境类关联起来,环境类中定义的成员,测试函数中可以访问。

实现TestCase事件——重写SetUp和TearDown

在测试套件对应的测试环境类中,重写SetUp和TearDown方法。

#include <iostream>
#include <gtest/gtest.h>
#include <list>
using std::cout;
using std::endl;


class GlobalTestEnvironment : public testing::Environment
{
public: 
    virtual void SetUp() override
    {
        cout << "全局测试环境初始化" << endl;
    }
    virtual void TearDown() override
    {
        cout << "全局测试环境销毁" << endl;
    }
};

class ListTestSuit : public testing::Test
{
public:
    static void SetUpTestCase()
    {
        cout << "测试套件ListTestSuit测试环境初始化" << endl;
    }
    static void TearDownTestCase()
    {
        cout << "测试套件ListTestSuit测试环境销毁" << endl;
    }

    virtual void SetUp() override
    {
        _lt = {1, 2, 3, 4};
        cout << "测试用例的测试环境初始化" << endl;
    }

    virtual void TearDown() override
    {
        _lt.clear();
        cout << "测试用例的测试环境销毁" << endl;
    }
public:
    std::list<int> _lt;
};

//测试套件名称必须和类名保持一致
TEST_F(ListTestSuit, testcase1)
{
    _lt.push_back(5);
    ASSERT_EQ(5, _lt.back());
}

TEST_F(ListTestSuit, testcase2)
{
    _lt.push_back(6);
    ASSERT_EQ(1, _lt.front());
}

int main(int argc, char* argv[])
{
    //将命令⾏参数传递给gtest
    testing::InitGoogleTest(&argc, argv);

    //注册全局测试环境类
    testing::AddGlobalTestEnvironment(new GlobalTestEnvironment);

    //运行所有测试
    RUN_ALL_TESTS();
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/646050.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【NumPy】关于numpy.sum()函数,看这一篇文章就够了

&#x1f9d1; 博主简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

安卓自定义控件(视图、改造控件、通知Notification、界面绘制)

视图的构建过程 此节介绍一个视图的构建过程&#xff0c;包括&#xff1a;如何编写视图的构造方法&#xff0c;4个构造方法之间有什么区别&#xff1b;如何测量实体的实际尺寸&#xff0c;包含文本、图像、线性视图的测量方法&#xff1b;如何利用画笔绘制视图的界面&#xff…

Ubuntu22.04设置程序崩溃产生Core文件

Ubuntu22.04设置程序崩溃产生Core文件 文章目录 Ubuntu22.04设置程序崩溃产生Core文件摘要Ubuntu 生成Core文件配置1. 检查 core 文件大小限制2. 设置 core 文件大小限制3. 配置 core 文件命名和存储路径4. 重启系统或重新加载配置5. 测试配置 关键字&#xff1a; Ubuntu、 C…

跨平台之用VisualStudio开发APK嵌入OpenCV(一)

序 本篇是杂谈以及准备工作&#xff08;此处应无掌声&#xff09; 暂时不管iOS&#xff08;因为开发hello world都要年费&#xff09; 软件&#xff1a; Visual Studio 2019&#xff08;含Android SDK和NDK编译器等&#xff09; OpenCV 这是一个女仆级的系列文章&#xf…

代码随想录|Day56|动态规划 part16|● 583. 两个字符串的删除操作 ● 72. 编辑距离

583. 两个字符串的删除操作 class Solution: def minDistance(self, word1: str, word2: str) -> int: dp [[0] * (len(word2) 1) for _ in range(len(word1) 1)] for i in range(len(word1) 1): dp[i][0] i for j in range(len(word2) 1): dp[0][j] j for i in rang…

OpenStack平台Nova管理

1. 规划节点 使用OpenStack平台节点规划 IP主机名节点192.168.100.10controller控制节点192.168.100.20compute计算节点 2. 基础准备 部署的OpenStack平台 1. Nova运维命令 &#xff08;1&#xff09;Nova管理安全组规划 安全组&#xff08;security group&#xff09;是…

网上比较受认可的赚钱软件有哪些?众多兼职选择中总有一个适合你

在这个互联网高速发展的时代&#xff0c;网上赚钱似乎成了一种潮流。但是&#xff0c;你是否还在靠运气寻找赚钱的机会&#xff1f;是否还在为找不到靠谱的兼职平台而苦恼&#xff1f; 今天&#xff0c;就为你揭秘那些真正靠谱的网上赚钱平台&#xff0c;让你的赚钱之路不再迷…

1107 老鼠爱大米

solution 记录每组的最大值&#xff0c;并比较组间的最大值胖胖鼠~ #include<iostream> using namespace std; int main(){int n, m, ans, fat -1, x;scanf("%d%d", &n, &m);for(int i 0; i < n; i){ans -1;for(int j 0; j < m; j){scanf(…

Docker compose 的方式一键部署夜莺

官方安装文档&#xff1a;https://flashcat.cloud/docs/content/flashcat-monitor/nightingale-v7/install/docker-compose/ 介绍&#xff1a;夜莺监控是一款开源云原生观测分析工具&#xff0c;采用 All-in-One 的设计理念&#xff0c;集数据采集、可视化、监控告警、数据分析…

python列表元素的增减之道:删除篇

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、前言 二、删除元素的基本方法 1. 使用remove()方法 2. 使用pop()方法 3. 使用del语句…

ICML 2024 | 北大、字节提出新型双层位置编码方案,有效改善长度外推效果

在这项工作中&#xff0c;我们利用语言序列的内在分段特性&#xff0c;设计了一种新的位置编码方法来达到更好的长度外推效果&#xff0c;称为双层位置编码&#xff08;BiPE&#xff09;。对于每个位置&#xff0c;我们的 BiPE 融合了段内编码和段间编码。段内编码通过绝对位置…

从用法到源码再到应用场景:全方位了解CompletableFuture及其线程池

文章目录 文章导图什么是CompletableFutureCompletableFuture用法总结API总结 为什么使用CompletableFuture场景总结 CompletableFuture默认线程池解析&#xff1a;ForkJoinPool or ThreadPerTaskExecutor&#xff1f;ForkJoinPool 线程池ThreadPerTaskExecutor线程池Completab…

AI教母李飞飞:现在的AI根本没有主观感觉能力

通用人工智能 (AGI) 是用来描述至少在人类展示&#xff08;或可以展示&#xff09;智能的所有方面都与人类一样聪明的人工智能代理的术语。这就是我们过去所说的人工智能&#xff0c;直到我们开始创建无可否认“智能”的程序和设备&#xff0c;但这些程序和设备只在有限的领域—…

查分数组总结

文章目录 查分数组定义应用举例LeetCode 1109 题「[航班预订统计] 查分数组定义 差分数组的主要适用场景是频繁对原始数组的某个区间的元素进行增减。 通过这个 diff 差分数组是可以反推出原始数组 nums 的&#xff0c;代码逻辑如下&#xff1a; int res[diff.size()]; // 根…

新建一个STM32的工程

一、SMT32开发方式 1、基于寄存器的方式&#xff1a;和51单片机开发方式一样&#xff0c;是用程序直接配置寄存器&#xff0c;来达到我们想要的功能&#xff0c;这种方式最底层、最直接、效率会更高一些&#xff0c;但是STM32的结构复杂、寄存器太多&#xff0c;所以不推荐基于…

HTTP协议、URL、HTTPS协议 ----- 讲解很详细

本章重点 理解应用层的作用, 初识HTTP协议 了解HTTPS协议 一、HTTP协议 1.认识url 虽然我们说&#xff0c;应用层协议是我们程序猿自己定的&#xff0c;但实际上&#xff0c;已经有大佬们定义了一些现成的&#xff0c;又非常好用的应用层协议&#xff0c;供我们直接参考使…

中国区 AWS 控制台集成 ADFS 登录

前言 本文将使用一台 Windows Server 2019 服务器实现自建 AD ADFS 环境集成到中国区 AWS 控制台进行单点登录. 参考文档: https://aws.amazon.com/cn/blogs/china/adfs-bjs/ 配置 AD 生产环境建议先给本地连接设置静态 IP 地址, 不设置也没事儿, 后面配置功能的时候会有 W…

excel表格写存神器--xlwt

原文链接&#xff1a;http://www.juzicode.com/python-tutorial-xlwt-excel 在 Python进阶教程m2d–xlrd读excel 中我们介绍了Excel表格的读取模块xlrd&#xff0c;今天这篇文章带大家了解Excel表格写存模块xlwt。他俩名字相近都以Excel的简写xl开头&#xff0c;rd是read的简写…

数字图像的几种处理算法

文章目录 1.二值化 2.海报化 3.灰度化 1)分量法 2)最大值法 3) 平均值法 4) 加权平均法 4.模糊化 1.二值化 二值化就是将图像划分成黑和白&#xff0c;通过设定一个标准&#xff08;如果大于这个标准就设为白&#xff0c;如果小于这个标准&#xff0c;就设为黑&#x…

布鲁可冲刺上市:极其依赖第三方,多个授权将到期,朱伟松突击“套现”

“奥特曼”概念股来了。 近日&#xff0c;布鲁可集团有限公司&#xff08;下称“布鲁可”&#xff09;递交招股书&#xff0c;准备在港交所主板上市&#xff0c;高盛和华泰国际为其联席保荐人。据贝多财经了解&#xff0c;布鲁可的经营主体为上海布鲁可科技集团有限公司。 天眼…