【C++基础知识——GoogleTest框架的Setup方法】

news2024/9/21 18:24:48

问题起因

工作中在写UT的时候,发现在具体的测试用例中,并没有显式化调用Setup()方法进行测试对象实例化。一开始以为写错了,发现依然能够正常运行。所以有此疑问。

代码展示:

class TaskTest : public ::testing::Test {
protected:

    std::unique_ptr<Task> sut;

    void SetUp() override {
        sut = std::make_unique<Task>();
    }
};

// 测试用例
TEST_F(taskTest, ProcessEvent_StartTask) {
    common::StartTask startTask();
    sut->process_event(startTask);
}

在测试用例中,sut并没有通过构造函数,或者调用Setup()函数进行实例化。

问题分析

在这段代码中,sut 实际上是已经实例化的。sut 是一个 std::unique_ptr 类型的成员变量,它在 SetUp 方法中被实例化。

详细解释

  1. sut 的声明:
std::unique_ptr<Task> sut;
  • sut 是一个指向 Task 对象的智能指针(std::unique_ptr)。
  1. SetUp 方法:

    • SetUp 方法是 Google Test 框架中的一个特殊方法,它会在每个测试用例运行之前被调用。
    • 在 SetUp 方法中,sut 被实例化为一个 Task 对象,并传递了必要的构造函数参数。
  2. 测试用例 ProcessEvent_StartTask:

    • TEST_F 是 Google Test 框架中的一个宏,用于定义基于测试夹具(fixture)的测试用例。
    • 在 ProcessEvent_StartTask 测试用例中,sut 已经在 SetUp 方法中被实例化,因此可以直接调用 sut 的 process_event 方法。

所以在 Google Test 框架中,每个测试用例在运行之前都会调用 SetUp 方法。因此,在 ProcessEvent_StartTask 测试用例中,sut 已经在 SetUp 方法中被实例化为一个有效的 Task 对象,因此可以直接调用 sut 的 process_event 方法。

框架自动调用分析

  1. 继承 ::testing::Test:

    • 测试类 TaskTest 继承自 ::testing::Test。
    • ::testing::Test 是 Google Test 框架提供的基类,包含了测试用例的基本功能。
  2. 重载 SetUp() 方法:

    • 在 TaskTest 类中重载了 SetUp() 方法。
    • SetUp() 方法是 ::testing::Test 类中的一个虚函数,Google Test 框架会在每个测试用例运行之前自动调用它。
  3. Google Test 的实现机制:

    • 当使用 TEST_F 宏定义测试用例时,Google Test 框架会创建一个测试用例对象。
    • 在测试用例对象的生命周期中,Google Test 框架会自动调用 SetUp() 方法来进行初始化操作。
    • 具体实现可以参考 Google Test 框架的源码,但一般不需要用户关心这些细节。

结论

SetUp() 函数会被 Google Test 框架自动调用。Google Test 框架通过继承机制和虚函数来实现这一点。

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

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

相关文章

缺陷及缺陷管理(复习)

​ 大家好&#xff0c;我是程序员小羊&#xff01; 前言&#xff1a; 今日目标 能够说出缺陷的判定标准 能够说出描述缺陷的6大核心内容 能够描述缺陷状态、严重程度、优先级的作用 能够按照提供的缺陷模版完成一个缺陷的提交 能够说出缺陷的跟踪流程 能够在禅道中提交测…

黑神话:悟空配置推荐,升级显卡还是ToDesk云电脑

虽然距离《黑神话&#xff1a;悟空》上线已有一个月的时间&#xff0c;但该游戏在国内外市场仍然火热&#xff0c;想要玩好、玩顺它着实是需要花费一些心力的。除了操作上的经验、技巧&#xff0c;用高配置电脑设备来实现无疑是最为关键的要素之一。那么如若现有机型性能不足&a…

2024年华为杯数学建模研赛(C题) 建模解析| 磁芯损耗建模 | 小鹿学长带队指引全代码文章与思路

我是鹿鹿学长&#xff0c;就读于上海交通大学&#xff0c;截至目前已经帮2000人完成了建模与思路的构建的处理了&#xff5e; 本篇文章是鹿鹿学长经过深度思考&#xff0c;独辟蹊径&#xff0c;实现综合建模。独创复杂系统视角&#xff0c;帮助你解决研赛的难关呀。 完整内容可…

(学习总结18)C++多态

C多态 一、多态的概念二、多态的定义及实现多态的构成条件1. 实现多态的两个必须条件&#xff1a;2. 虚函数3. 虚函数的重写/覆盖4. 多态场景的一个选择题5. 虚函数重写的一些其他问题协变析构函数的重写 6. override 和 final 关键字7. 重载/重写/隐藏的对比 三、纯虚函数和抽…

【堆栈操作基本规则】假设SS的初值为2000H,SP初值为0200H,在执行了5次入栈操作和2次出栈操作后SP的内容为多少?写出计算过程。

欢迎来到我的技术博客&#xff01; &#x1f389; 这里不仅有满满的编程干货和学习资源&#xff0c;我的某站账号也为你准备了更多实用的技术视频和知识分享。 &#x1f449; 点击关注我的小破站账号&#xff0c;获取更多编程技巧和学习资源&#xff01; 小破站主页 我们来逐…

新手入门:小程序架构快速上手

目录 新建项目和配置 项目基本结构 新建小程序页面 修改项目首页 全局配置 窗口 tabBar 页面配置 小程序基本语法 wxml 数据绑定 条件渲染 列表渲染 wxss wxss 对比 css rpx import 全局样式和局部样式 js wxs 数据请求 get和post请求 小程序和跨域 小程…

C++进阶 set和map讲解

set 和 map set 和 multiset set set 类的介绍 set 是基于红黑树实现的有序容器。它的插入、删除、查找操作的时间复杂度均为 O(log n)。遍历时&#xff0c;set 的迭代器按照中序遍历&#xff0c;因此它总是以升序排列元素。 set 的声明如下&#xff0c;T 表示 set 的关键字类…

The First项目报告:变革全链身份,Layer3的未来价值解读

2024年7月5日&#xff0c;代币分发协议 Layer3 基金会公布代币 L3 经济模型&#xff0c;以任务平台为市场切入点的 Layer3 聚合了市场上花样繁多的项目&#xff0c;帮助用户实现通过一个平台交互全链项目的操作。乘着牛市的浪潮&#xff0c;各链生态重新火热&#xff0c;Layer3…

微服务_入门1

文章目录 一、 认识微服务二、 微服务演变2.1、 单体架构2.2、 分布式架构2.3、 微服务2.4、 微服务方案对比 三、 注册中心3.1、 Eureka3.2、 Nacos3.2.1、服务分级存储模型3.2.2、权重配置3.2.3、环境隔离 一、 认识微服务 二、 微服务演变 随着互联网行业的发展&#xff0c;…

Java项目实战II基于Java+Spring Boot+MySQL的洗衣店订单管理系统(开发文档+源码+数据库)

目录 一、前言 二、技术介绍 三、系统实现 四、论文参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者 一、前言 随着生活节奏的加快&#xff0c;现代人对便捷、高效服务的需求日益增长&#xff0c;洗衣店作为日常生…

[Linux] Linux操作系统 进程的状态

标题&#xff1a;[Linux] Linux操作系统 进程的状态 个人主页&#xff1a;水墨不写bug &#xff08;图片来源于网络&#xff09; 目录 一、前置概念的理解 1.并行和并发 2.时间片 3.进程间具有独立性 4.等待的本质 正文开始&#xff1a; 在校的时候&#xff0c;你一定学过《…

【自然语言处理】补充:词项权重计算及向量空间模型

【自然语言处理】补充:词项权重计算及向量空间模型 文章目录 【自然语言处理】补充:词项权重计算及向量空间模型1. 排序式检索2. 词项频率3. tf-idf权重计算4. 向量空间模型1. 排序式检索 布尔检索的不足:结果过少或者过多 布尔查询常常会是过少(=0)或者过多(>1000)在…

Python “函数” ——Python面试100道实战题目练习,巩固知识、检查技术、成功就业

本文主要是作为Python中函数的一些题目&#xff0c;方便学习完Python的函数之后进行一些知识检验&#xff0c;感兴趣的小伙伴可以试一试&#xff0c;含选择题、判断题、实战题、填空题&#xff0c;答案在第五章。 在做题之前可以先学习或者温习一下Python的函数&#xff0c;推荐…

[Python数据可视化]探讨数据可视化的实际应用:三个案例分析

数据可视化是理解复杂数据集的重要工具&#xff0c;通过图形化的方法&#xff0c;可以直观地展示信息、趋势和模式。本文将深入探讨三个实际案例&#xff0c;包括健康数据分析、销售趋势分析、城市交通流量分析。每个案例将提供假设数据、详细注释的代码及分析结果。 案例 1: …

【PyTorch】Tensor(张量)介绍

Tensor 的概念 Tensor 中文为张量。张量的意思是一个多维数组&#xff0c;它是标量、向量、矩阵的高维扩展。 标量可以称为 0 维张量&#xff0c;向量可以称为 1 维张量&#xff0c;矩阵可以称为 2 维张量&#xff0c;RGB 图像可以表示 3 维张量。你可以把张量看作多维数组。 …

Redis作为单线程模型,为什么效率高、速度快呢?

前言&#xff1a; 效率高、速度快是相较于数据库来说的&#xff08;MySQL、Orcale、SQL server&#xff09; 文章目录 一、单线程模式的工作流程二、为什么快&#xff1f; 一、单线程模式的工作流程 这里我们所说的单线程是指&#xff1a;Redis只使用一个线程&#xff0c;来处…

PPP的配置

概述&#xff1a;PPP模式&#xff0c;即公私合作模式&#xff08;Public-Private Partnership&#xff09;&#xff0c;是一种公共部门与私营部门合作的模式。 一、实验拓扑 实验一&#xff1a;PPP基本功能 实验步骤&#xff1a; &#xff08;1&#xff09;配置AR1的接口IP地…

xilinx hbm ip运用

AXI-HBM是一个集成的IP核&#xff0c;该核提供高达16个AXI3从PORT的HBM接口&#xff0c;每个使用他自己的独立的时钟。HBM2 GEN存储器也支持&#xff0c;HBM相对传统DDR的方案&#xff0c;带宽得到极大的提高 特征 AXI3从端口存储器接口 -16个独立的256bit存储器接口 -可选的…

国标视频流媒体服务GB28181和Ehome等多协议接入的Liveweb方案详解

Liveweb视频融合/汇聚云平台基于“云-边-端”一体化架构&#xff0c;部署轻量简单、功能灵活多样&#xff0c;平台可支持多协议&#xff08;GB28181/RTSP/Onvif/海康SDK/Ehome/大华SDK/RTMP推流等&#xff09;、多类型设备接入(IPC/NVR/监控平台)&#xff0c;在视频能力上&…

企业文档管理系统哪个好?2024年热门的10款文档管理系统软件推荐

在信息化时代&#xff0c;企业每天都会生成海量的文档、数据和资料。 如何有效管理这些文档&#xff0c;确保信息安全、版本控制和协同办公顺畅&#xff0c;是每个企业都必须面对的挑战。 2024年&#xff0c;随着技术的不断进步&#xff0c;市场上涌现出了众多优秀的文档管理…