GTest测试框架介绍

embedded/2024/12/23 7:43:56/

文章目录

    • GTest使用
      • 简单的宏断言
      • 事件机制
      • 全局使用样例
      • 局部使用样例

GTest是谷歌发布的一个跨平台的单元测试框架,主要是为了在不同平台上编写的C++单元测试而生成的

提供了丰富的断言,致命和非致命的判断,参数化

GTest使用

简单的宏断言

断言分两类

一类是ASSERT系列的,如果当前检测失败则直接退出函数

另一类是EXPECT系列,如果当前点检测失败则继续往下执行

但是必须要在单元测试宏函数中才能使用

是这样用的

#include <iostream>
#include <gtest/gtest.h>
#include "../logs/Xulog.h"TEST(test, great_than)
{int age = 20;ASSERT_GT(age, 18);INFO("OK!");
}
int main(int argc, char* argv[])
{testing::InitGoogleTest(&argc, argv);RUN_ALL_TESTS();return 0;
}

断言其实不怎么好用 真正有用的其实是事件机制

事件机制

GTest中有三种测试事件机制,分别是全局,局部

测试程序中可以有很多测试套件,对应着全局,每一个测试套件中可以有多个单元测试

主要针对整个程序,全局变量

测试中可以有多个测试套件,可以包含一组单元测试,不是很好理解,可以认为这是一个测试环境

可以在单元测试之前进行测试环境初始化,测试完毕后,进行测试环境清理

在整体的测试中,只会初始化一次环境

这其实就是我们用户自己定义的一个测试环境,是一个全局的测试环境类

这其中有一个接口是virtual void Setup() override();是用于对测试环境的初始化

还有一个是virtual void TearDown();是在代码执行完毕的情况下执行的

在用例测试中,每一次单元测试都是单独进行的,互不影响

全局中是不能定义成员变量的

全局使用样例

#include <iostream>
#include <gtest/gtest.h>
#include <unordered_map>#include "../logs/Xulog.h"class MyEnvironment : public testing::Environment
{
public:virtual void SetUp() override{INFO("单元测试环境初始化!");}virtual void TearDown() override{INFO("单元测试结束销毁!");}private:
};// TEST(MyEnvironment, test1)
// {
//     INFO("单元测试1");
// }// TEST(MyEnvironment, test2)
// {
//     INFO("单元测试2");
// }std::unordered_map<std::string, std::string> mp;
class MyMapTest : public testing::Environment
{
public:virtual void SetUp() override{INFO("单元测试环境初始化!");mp.insert(std::make_pair("hello","你好"));}virtual void TearDown() override{INFO("单元测试结束销毁!");mp.clear();}
};TEST(MyMapTest, test1)
{INFO("单元测试2");ASSERT_EQ(mp.size(),1);mp.insert(std::make_pair("aa","AA"));
}TEST(MyMapTest, test2)
{INFO("单元测试2");ASSERT_EQ(mp.size(),1);mp.erase("aa");
}int main(int argc, char *argv[])
{testing::InitGoogleTest(&argc, argv);testing::AddGlobalTestEnvironment(new MyEnvironment);testing::AddGlobalTestEnvironment(new MyMapTest);RUN_ALL_TESTS();return 0;
}

局部使用样例

#include <iostream>
#include <gtest/gtest.h>
#include <unordered_map>#include "../logs/Xulog.h"class MyTest : public testing::Test
{
public:static void SetUpTestCase(){INFO("初始化总环境!");}static void TearDownTestCase(){INFO("清理总环境");}public:std::unordered_map<std::string, std::string> _mp;
};
TEST_F(MyTest, insert_test)
{_mp.insert(std::make_pair("hello", "你好"));_mp.insert(std::make_pair("aa", "AA"));
}
TEST_F(MyTest, size_test)
{ASSERT_EQ(_mp.size(), 2);
}int main(int argc, char* argv[])
{   testing::InitGoogleTest(&argc, argv);RUN_ALL_TESTS();return 0;
}

如果局部需要设置全局的环境,就需要使用之前的全局的继承void SetUp() overridevoid TearDown() override


http://www.ppmy.cn/embedded/123366.html

相关文章

SpringCloud-Alibaba第二代微服务快速入门

1.简介 Spring Cloud Alibaba其实是阿里的微服务解决方案&#xff0c;是阿里巴巴结合自身微服务实践,开源的微服务全家桶&#xff0c;在Spring Cloud项目中孵化成为Spring Cloud的子项目。第一代的Spring Cloud标准中很多组件已经停更,如&#xff1a;Eureak,zuul等。所以Sprin…

Java项目实战II基于Java+Spring Boot+MySQL的大创管理系统(源码+数据库+文档)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者 一、前言 在当前创新创业氛围浓厚的背景下&#xff0c;大学生创新创业项目&#xff08;简称“大创”&#xff0…

opencv-如何获取图像区域特定像素区域大小

需求 通过鼠标框选某个区域&#xff0c;返回这个区域的像素大小。 源码 # e:path\to\cal_rectangle_area.py import cv2 import numpy as np # 初始化变量 image cv2.imread(./vlcsnap-2024-09-25-10h51m27s007.png) if image is None: print("Error: Image cou…

【数据库】Java 集成mongodb— MongoTemplate 详解

MongoTemplate 是 Spring Data MongoDB 提供的核心类&#xff0c;用于简化与 MongoDB 数据库的交互。它封装了许多常见的数据库操作&#xff0c;使开发者能够轻松执行 CRUD&#xff08;创建、读取、更新、删除&#xff09;操作&#xff0c;处理复杂查询和聚合等。本文将详细介绍…

【售后资料】软件售后服务方案(word原件)

软件售后服务方案的售后服务范围广泛&#xff0c;涵盖了多个方面&#xff0c;以确保客户在使用软件过程中得到全面、及时的支持。具体来说&#xff0c;这些服务范围通常包括以下几个核心内容&#xff1a; 技术支持服务维护与更新服务培训与教育服务定制化服务数据管理与服务客户…

websockets库使用(基于Python)

主要参考资料&#xff1a; 【Python】websockets库的介绍及用法: https://blog.csdn.net/qq_53871375/article/details/135920231 python模块websockets&#xff0c;浏览器与服务器之间的双向通信: https://blog.csdn.net/randy521520/article/details/134752051 目录 websocke…

使用微服务Spring Cloud集成Kafka实现异步通信

在微服务架构中&#xff0c;使用Spring Cloud集成Apache Kafka来实现异步通信是一种常见且高效的做法。Kafka作为一个分布式流处理平台&#xff0c;能够处理高吞吐量的数据&#xff0c;非常适合用于微服务之间的消息传递。 微服务之间的通信方式包括同步通信和异步通信。 1&a…

网络安全学习的详细要点

网络安全学习的详细要点可以归纳为以下几个方面&#xff1a; 1. 基础知识学习 计算机网络基础&#xff1a;了解各种网络协议、防火墙、数据转发原理等。 操作系统基础&#xff1a;熟悉操作系统的基本原理和操作。 编程语言&#xff1a;掌握C、C、Python等编程语言&#xff…