RabbitMQ的学习和模拟实现|GTest测试框架的介绍和简单使用

GTest

项目仓库:https://github.com/ffengc/HareMQ

  • GTest
    • GTest是什么
    • 我们需要学习的GTest功能
    • 宏断言
    • 事件机制
      • 全局测试套件
      • 独立测试套件

GTest是什么

GTest是一个跨平台的 C++单元测试框架,由google公司发布。gtest是为了在不同平台上为编写C++单元测试而生成的。它提供了丰富的断言、致命和非致命判断、参数化等等。

我们需要学习的GTest功能

  1. 简单的宏断言机制
  2. 事件机制(全局测试,单独用例测试)

宏断言

GTest中断言的宏可以分为两类:

  • ASSERT_系列:如果当前检测失败则推出当前函数
  • EXPECT_系列: 如果当前检测失败则继续向下执行
// bool值检查
ASSERT_TRUE(res)    // 期待res是true
ASSERT_FALSE(res)   // 期待res是false
//数值型数据检查
ASSERT_EQ(arg1, arg2) // arg1 == arg2 返回 true
ASSERT_NE(arg1, arg2) // arg1 != arg2 返回 true
ASSERT_LT(arg1, arg2) // arg1 < arg2  返回 true
ASSERT_GT(arg1, arg2) // arg1 > arg2  返回 true
ASSERT_LE(arg1, arg2) // arg1 <= arg2 返回 true
ASSERT_GE(arg1, arg2) // arg1 >= arg2 返回 true
TEST(test1, MYTEST) {}

所有的测试都要放在一个单元测试下才行的。宏的第一个参数表示“测试套件名称”,第二个参数表示“测试名称”。

testing::InitGoogleTest(&argc, argv);
RUN_ALL_TESTS();

通过这种方式来初始化和运行所有的测试。

事件机制

测试中,可以有多个测试套件(包含有一组单元测试)

测试套件: 可以理解成一个测试环境,可以在单元测试之前进行测试环境初始化,测试完毕后进行测试环境清理

  • 全局测试套件:在整体的测试中,只会初始化一次环境,在所有测试用例完毕后,才会清理环境
  • 用例测试套件:在每次的单元测试中,都会重新初始化测试环境,完毕后清理环境

全局测试套件

#include "../log.hpp"
#include <gtest/gtest.h>
#include <iostream>class MyEnv : public testing::Environment {
public:virtual void SetUp() override {LOG(INFO) << "before testing, init ..." << std::endl;}virtual void TearDown() override {LOG(INFO) << "after testing, clearing ..." << std::endl;}
};
TEST(MyEnv, test1) {LOG(INFO) << "unit test1" << std::endl;
}
TEST(MyEnv, test2) {LOG(INFO) << "unit test2" << std::endl;
}
int main(int argc, char** argv) {testing::AddGlobalTestEnvironment(new MyEnv);testing::InitGoogleTest(&argc, argv);auto res = RUN_ALL_TESTS();LOG(INFO) << "res: " << res << std::endl;return 0;
}

观察每条打印信息的位置,观察全局套件是何时初始化和何时清理的。

独立测试套件

  • 测试环境类中,可以定义成员变量,成员变量是独立的,是与当前测试套件相关的单元测试才能访问的。
  • 单元测试宏名称变成了TEST_F(),而且这个宏函数的第一个参数(总测试名称),一定要和套件环境类名一致。(在单元测试宏函数中,能够直接访问类成员变量)
#include "../log.hpp"
#include <gtest/gtest.h>
#include <iostream>
#include <unordered_map>class MyTest : public testing::Test {
public:static void SetUpTestCase() {LOG(INFO) << "before each suit test, init ..." << std::endl;}static void TearDownTestCase() {LOG(INFO) << "after each suit test, clearing ..." << std::endl;}virtual void SetUp() override { }virtual void TearDown() override { }
public:std::unordered_map<std::string, std::string> __map;
};TEST_F(MyTest, insert_test) {__map.insert({ "hello", "nihao" });__map.insert({ "bye", "zaijian" });
}
TEST_F(MyTest, size_test) {ASSERT_EQ(__map.size(), 2);
}int main(int argc, char** argv) {testing::InitGoogleTest(&argc, argv);auto res = RUN_ALL_TESTS();LOG(INFO) << "res: " << res << std::endl;return 0;
}

此时运行可以发现,是通过不了测试的,因为 __map 是每个测试单元独立的。所以insert_test里添加的数据不会出现在size_test中。

如果想让一开始就有两个数据,可以在:

    virtual void SetUp() override { }virtual void TearDown() override { }

进行全部的初始化,就是公共的初始化。

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

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

相关文章

JAVA JUC学习笔记

基础知识 1、进程和线程的对比 进程基本上相互独立的&#xff0c;而线程存在于进程内&#xff0c;是进程的一个子集进程拥有共享的资源&#xff0c;如内存空间等&#xff0c;供其内部的线程共享进程间通信较为复杂 同一台计算机的进程通信称为 IPC&#xff08;Inter-process …

.Net 8 控制台程序部署(Linux篇)

在无流量Linux环境下部署.NET8开发的控制台程序 写在前面准备远程访问安装环境程序部署1.下载并导入2.解压并配置3.发布程序4.创建Systemd服务单元文件5.启用并启动服务 写在结尾 写在前面 好久没更新文章了&#xff0c;今天给大家带来的是在在无流量的Linux工控机上部署.Net8…

理想化相机模型的相机内参

文章目录 理想化相机模型的相机内参计算1. 相机内参定义2. 根据视角和图像分辨率计算相机内参2.1 计算焦距 fx 和 fy2.2 计算主点 cx 和 cy3. 示例计算3.1 计算 fx3.2 假设 fy = fx(因为没有垂直视场角的信息)3.3 计算主点4. 相机内参矩阵理想化相机模型的相机内参计算 在理…

MSP430M03507最小系统板的keil环境搭配,用keil编辑ti单片机

转载自嘉立创MSP430M03507开发手册 这篇文章只是因为我的keil版本与嘉立创的不一样&#xff0c;所以添加了我自己遇到的问题解析 先说说为什么要用keil编辑&#xff0c;因为ti单片机自己的ccs编译环境需要对应仿真器&#xff0c;那个加芯片都240了&#xff0c;哪有那么多钱买…

FastDFS分布式存储

一&#xff1a;FastDFS原理 FastDFS是一个开源的轻量级分布式文件系统&#xff0c;功能包括&#xff1a;文件存储&#xff0c;文件同步&#xff0c;文件访问&#xff08;文件上传、文件下载&#xff09;等&#xff0c;解决了大容量存储和负载均衡的问题。 1&#xff1a;FastD…

56 网络层

本节重点 理解网络层的作用&#xff0c;深入理解IP协议的基本原理 对整个TCP/IP协议有系统的理解 对TCP/IP协议体系下的其他重要协议和技术有一定的了解 目录 前置认识ip协议基本概念协议头格式网段划分特殊的ip地址ip地址的数量限制私有ip和公有ip路由路由表生成算法 在复杂…

Wi-SUN无线通信技术 — 大规模分散式物联网应用首选

引言 在数字化浪潮的推动下&#xff0c;物联网&#xff08;IoT&#xff09;正逐渐渗透到我们生活的方方面面。Wi-SUN技术以其卓越的性能和广泛的应用前景&#xff0c;成为了大规模分散式物联网应用的首选。本文将深入探讨Wi-SUN技术的市场现状、核心优势、实际应用中的案例以及…

使用html2pdf实现前端页面打印,批量打印导出为PDF

// 使用注意&#xff1a; // 如果页面中有图片会因为跨域问题导致图片下载不下来 // 所以在图片标签中需要加入一些属性&#xff1a;crossOrigin 和 url后加一个随机后缀 // <Image crossOrigin"anonymous" src{${faceInfo.user_face_url}?v${new Date()}} width…

一些和颜色相关网站

1.中国传统色 2.网页颜色选择器 3.渐变色网站 4.多风格色卡生成 5.波浪生成 6.半透明磨砂框

第123天:内网安全-域防火墙入站出站规则不出网隧道上线组策略对象同步

目录 案例一&#xff1a; 单机-防火墙-限制端口\协议出入站 案例二&#xff1a;不出网的解决思路 入站连接 隧道技术 案例三&#xff1a;域控-防火墙-组策略对象同步 案例四&#xff1a;域控-防火墙-组策略不出网上线 msf cs 案例一&#xff1a; 单机-防火墙-限制端口\…

PHP MySQL Update

PHP MySQL Update 在PHP开发中&#xff0c;与MySQL数据库的交互是至关重要的。其中&#xff0c;更新数据库中的数据是一项基本且常见的操作。本文将详细介绍如何使用PHP来更新MySQL数据库中的数据。 1. 环境准备 在开始之前&#xff0c;请确保您的开发环境满足以下条件&…

RabbitMQ的学习和模拟实现|sqlite轻量级数据库的介绍和简单使用

SQLite3 项目仓库&#xff1a;https://github.com/ffengc/HareMQ SQLite3 什么是SQLite为什么需要用SQLite官方文档封装Helper进行一些实验 什么是SQLite SQLite是一个进程内的轻量级数据库&#xff0c;它实现了自给自足的、无服务器的、零配置的、事务性的 SQL数据库引擎…

CTFSHOW game-gyctf web2

【2020年新春战“疫”】game-gyctf web2 参考https://www.cnblogs.com/aninock/p/15408090.html 说明&#xff1a;看见网上好像没多少人写&#xff0c;刚好玩到这道题了&#xff0c;就写一下吧。 一、利用入口 常规套路发现www.zip然后进行代码审计 index可以包含update&…

汽车技术智能化程度不断提升,线束可靠性如何设计?

随着汽车技术的高速发展&#xff0c;汽车自动化、智能化程度的逐步提高&#xff0c;人们对汽车的安全性、舒适性、娱乐性等要求也不断提高&#xff0c;加上汽车节能减排法规的不断严峻&#xff0c;整车电气设备不断增加&#xff0c;作为连接汽车各种电器设备“神经网络”的整车…

【Ubuntu】Ubuntu20修改MAC地址

文章目录 一、临时修改MAC地址&#xff08;重启后复原&#xff09;二、永久修改MAC地址 场景&#xff1a;在做虚拟机复制时&#xff0c;复制完的两台虚拟机存在相同MAC&#xff0c;导致无法分别分配IP。 解决&#xff1a;修改一台虚拟机的MAC地址。 一、临时修改MAC地址&#…

谷粒商城实战笔记-跨域问题

一&#xff0c;When allowCredentials is true, allowedOrigins cannot contain the special value “*” since that cannot be set on the “Access-Control-Allow-Origin” response header. To allow credentials to a set of origins, list them explicitly or consider u…

余弦退火示例pytorch

余弦退火学习率调度器是一种用于动态调整学习率的方法&#xff0c;能够在训练过程中逐渐降低学习率&#xff0c;从而有助于模型更好地收敛。我们可以通过PyTorch中的torch.optim.lr_scheduler.CosineAnnealingLR来实现这种调度器。 下面是一个包含3层Conv2d模型的示例&#xf…

数据清洗系统设计

设计一个高效的数据清洗系统旨在确保数据的质量&#xff0c;以便后续分析和决策过程可以基于准确、一致和完整的信息。以下是设计实时数据清洗系统时需要考虑的关键要素&#xff0c;结合之前提到的设计目标和原则&#xff1a; 1. 高效的数据处理 技术选型&#xff1a;采用并行…

Linux基于CentOS7【yum】【vim】的基础学习,【普通用户提权】

目录 yum生态 什么是yum yum是如何得知目标服务器的地址和下载链接 vim vim模式 命名模式 光标移动 插入模式 i键插 a键插 o键插 底行模式 批量化注释 批量化去注释 创建vim配置文件 例子 高亮功能&#xff1a; 缩进功能&#xff1a; 符号位自动补齐功能…

面试题002:Java的数据类型

基本数据类型&#xff1a;包括 整数类型&#xff08;byte、int、short、long&#xff09;、浮点数类型&#xff08;float、double&#xff09;、字符类型&#xff08;char&#xff09;、布尔类型&#xff08;boolean&#xff09;。 引用数据类型&#xff1a;包括数组&#xff0…