【C++】GoogleTest进阶之gMock

本文介绍了GoogleMock库的使用,包括其概念、安装步骤和基本使用方法。文章通过一个用户账户系统的例子展示了如何创建和使用mock类,强调了mock对象在测试中的重要性。此外,还详细讲解了如何设置mock对象的预期行为,如参数值、调用次数、顺序以及一些注意事项,帮助读者掌握gMock的高级用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

🚀 优质资源分享 🚀

学习路线指引(点击解锁) 知识定位 人群定位
🧡 Python实战微信订餐小程序 🧡 进阶级 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。
💛Python量化交易实战💛 入门级 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统

gMock是什么

当我们去写测试时,有些测试对象很单纯简单,例如一个函数完全不依赖于其他的对象,那么就只需要验证其输入输出是否符合预期即可。

但是如果测试对象很复杂或者依赖于其他的对象呢?例如一个函数中需要访问数据库或者消息队列,那么要想按照之前的思路去测试就必须创建好数据库和消息队列的客户端实例,然后放在该函数内使用。很多时候这种操作是很麻烦的,此时Mock Object就能帮助我们解决这个问题。一个Mock Object实现与真实对象相同的接口,它可以替代真实对象去使用,而我们要做的就是制定好该Mock Object的行为(调用多少次、参数、返回值等等)

参考文档:
gMock官方文档

安装gMock

gMock现在与gTest是组合使用的关系,因此在安装gTest时默认就会安装gMock,具体的安装方式见github上的官方说明
https://github.com/google/googletest/tree/main/googletest

使用gMock的基本思路

  • 首先,使用一些简单的gMock宏来描述想要模拟的接口,它们会实现你的mock类
  • 然后,创建一些mock object然后使用gMock提供的语法指定好它们的行为
  • 最后,运行需要使用这些mock object的代码,gMock会在mock object的行为不符合预期的时候发现并指出

gMock快速入门

假设我们在做一个用户的账户系统,一个用户会有一个账户,用户提供接口salary,账户提供接口add和getAccount,在用户的salary内会调用账户的add和getAccount接口
特别注意:此处的账户就是我们要mock的对象,它是用户的一个依赖。要想模拟它,它内部必须有虚析构函数,各个接口也建议是虚函数乃至纯虚函数。这里我的理解是,实际上mock object是对真实对象的代理/替换,在代理模式中比较常见的一种做法就是代理类和被代理类继承自同一个父类/接口

基本样例

User

Copy#ifndef USER\_H
#define USER\_H
#include 
#include "account.h"

class User{
public:
    /// @brief User类的对象依赖于Account的对象
    /// @param account Account实例,被User所依赖 
    User(Account *account){
        account_ = account;
    }
    /// @brief 模拟发工资的场景
    /// @param money 发的钱数
    /// @return 账户余额
    int salary(int mon
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值