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

news2024/11/26 6:51:51

一.什么是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;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Niantic利用Meta Llama让数字生物栩栩如生

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

修改了vue3 <script setup>留言板

Лунная ночь <template><button class"edit_view_checkbox"><input type"checkbox" v-model"editshowInput" value"编辑" /></button><div class"editshowInput" v-if"editshowI…

Modal.method() 不显示头部的问题

ant-design中的Modal组件有两种用法&#xff1a; 第一种是用标签&#xff1a;<a-modal></a-modal> 第二种是用Api&#xff1a;Modal.info、Modal.warning、Modal.confirm...... 一开始项目中这两种用法是混用的&#xff0c;后面UI改造&#xff0c;需要统一样式&…

spring boot 项目配置支持https

前言 本地的项目接口 需要支持https访问 准备 java环境 由于我们使用的是java自带的 keytool工具java 生成根证书 环境是必须的 实战 生成 https证书# alias 别名 keystore 存储文件名称 storepass 存储密码 validity 有效期&#xff08;天数&#xff09; keytool -genk…

区块链系统开发测试----链码部署开发、系统开发验证

一.检查配置环境 检查虚拟机环境&#xff0c;确保有正在运行的Hyperledger Fabric区块链&#xff0c;并且其中chaincode_basic、credit_chaincode链码可以正常调用 查看chaincode_basic、credit_chaincode链码调用 二.开发征信链码代码 基于现有征信链码&#xff0c;开发征信…

迁移基于MicroBlaze处理器的设计

迁移基于MicroBlaze处理器的设计 生成系统基础设施&#xff08;MicroBlaze、AXI_Interconnect&#xff0c; Clk_Wiz、Proc_Sys_Reset&#xff09; 生成系统基础设施&#xff08;MicroBlaze、AXI_Interconnect、Clk_Wiz和 Proc_Sys_Reset&#xff09;&#xff1a; 1.使用所需的板…

Media Encoder 2024 for Mac媒体编码器安装教程ME2024安装包下载

安装 步骤 1&#xff0c;双击打开下载好的安装包。 2&#xff0c;选择install ame_24...双击打开启动安装程序。 3&#xff0c;点击install。 4&#xff0c;输入电脑密码。 5&#xff0c;软件安装中... 6&#xff0c;安装结束点击好。 7&#xff0c;返回打开的镜像 选择激活补…

力扣HOT100 - 1143. 最长公共子序列

解题思路&#xff1a; 动态规划 class Solution {public int longestCommonSubsequence(String text1, String text2) {int m text1.length(), n text2.length();int[][] dp new int[m 1][n 1];for (int i 1; i < m; i) {char c1 text1.charAt(i - 1);for (int j 1…

Window VScode配置Conda教程(成功版)

VScode配置Conda 参考博文&#xff1a;https://blog.csdn.net/qq_51831335/article/details/126757014Anaconda安装&#xff08;注意勾选自动配置环境变量&#xff01;&#xff09; 官网&#xff1a;https://www.anaconda.com/download/success VScode配置 python插件安装安装 …

makefile一些特殊且常用的符号

$^&#xff1a;表示所有的依赖文件列表&#xff0c;多个文件以空格分隔。 $&#xff1a;表示目标文件的名称。 $<&#xff1a;表示第一个依赖文件的名称。 $*&#xff1a;表示目标文件的主文件名&#xff08;不包括扩展名&#xff09;。 $?&#xff1a;表示所有比目标文件更…

【AI算法岗面试八股面经【超全整理】——机器学习】

AI算法岗面试八股面经【超全整理】 概率论信息论机器学习深度学习CVNLP 目录 1、回归损失函数2、分类损失函数3、误差&#xff08;Error&#xff09;、偏差&#xff08;Bias&#xff09;、方差&#xff08;Variance&#xff09;4、PCA&#xff08;Principle Component Analysi…

Golang协程和通道

文章目录 协程&#xff08;goroutine&#xff09;基本介绍GMP模型协程间共享变量 通道&#xff08;channel&#xff09;基本介绍channel的定义方式channel的读写channel的关闭channel的遍历方式只读/只写channelchannel最佳案例select语句 协程&#xff08;goroutine&#xff0…

springboot项目部署到linux服务器

springboot后端 修改前 修改后 vue前端 修改前 将地址中的 localhost改为 ip 重新生成war包 war上传到linux的tomcat的webapps下 其他环境配置和macOS大差不差 Tomcat安装使用与部署Web项目的三种方法_tomcat部署web项目-CSDN博客

回文链表(快慢指针解法之在推进过程中反转)

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd;抱怨深处黑暗&#xff0c;不如提灯前行…

海顺新材将携手LG化学,开启人类更美好未来的“零”碳之旅

继与东华大学成立先进低维材料中心后&#xff0c;海顺新材在可持续发展方向再响重鼓&#xff0c;与LG化学创新单一材质达成初步合作意向&#xff0c;未来&#xff0c;双方将有望在环保膜材领域展开合作。 自“双碳”目标提出以来&#xff0c;全球经济出现一项很重要的特征&…

MySQL进阶之(九)数据库的设计规范

九、数据库的设计规范 9.1 范式的概念9.1.1 范式概述9.1.2 键和相关属性 9.2 常见的范式9.2.1 第一范式9.2.2 第二范式9.2.3 第三范式9.2.4 第四范式9.2.5 第五范式&#xff08;域键范式&#xff09; 9.3 反范式化9.3.1 概述9.3.2 举例9.3.3 反范式化新问题9.3.4 通用场景 9.4 …

K210 数字识别 教程

一、烧写固件 连接k210开发板&#xff0c;点开烧录固件工具&#xff0c;选中固件&#xff0c;并下载 二、模型训练 网站&#xff1a;MaixHub 1、上传文件 2、开始标记数据 添加9个标签&#xff0c;命名为1~9&#xff0c;按键盘w开始标记&#xff0c;键盘D可以下一张图片&…

解读makefile中的.PHONY

在 Makefile 中&#xff0c;.PHONY 是一个特殊的目标&#xff0c;用于声明伪目标&#xff08;phony target&#xff09;。伪目标是指并不代表实际构建结果的目标&#xff0c;而是用来触发特定动作或命令的标识。通常情况下&#xff0c;.PHONY 会被用来声明一组需要执行的动作&a…

利用迭代方法求解线性方程组(Matlab)

一、问题描述 利用迭代方法求解线性方程组。 二、实验目的 掌握Jacobi 方法和Gauss-Seidel 方法的原理&#xff0c;能够编写代码实现两种迭代方法&#xff1b;能够利用代码分析线性方程组求解中的误差情况。 三、实验内容及要求 用代码实现&#xff1a;对下列方程中重新组织…

@ConfigurationProperties结合Nacos配置动态刷新之底层原理分析

Hello&#xff0c;我是大都督周瑜&#xff0c;本文给大家分析一下ConfigurationProperties结合Nacos配置动态刷新的底层原理&#xff0c;记得点赞、关注、分享哦&#xff01; 公众号&#xff1a;IT周瑜 应用背景 假如在Nacos中有Data ID为common.yml的配置项&#xff1a; m…