首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

gmock如何指定不应该调用其他mocking方法?

gmock是Google Mock的缩写,是一个用于C++的单元测试框架。它可以帮助开发人员模拟和测试C++代码中的各种行为和交互。

在gmock中,可以使用EXPECT_CALL宏来指定对某个函数的调用,并定义期望的行为。如果不希望某个mock对象调用其他mocking方法,可以使用NiceMock来创建一个“友好”的mock对象,它会忽略未定义的调用,并且不会报错。

下面是一个示例代码:

代码语言:txt
复制
#include <gmock/gmock.h>

class MockClass {
public:
    MOCK_METHOD(void, Method1, ());
    MOCK_METHOD(void, Method2, ());
};

TEST(MyTest, TestMethod) {
    NiceMock<MockClass> mockObj;
    EXPECT_CALL(mockObj, Method1()).Times(1);
    EXPECT_CALL(mockObj, Method2()).Times(0);

    // 调用Method1
    mockObj.Method1();

    // 调用Method2,但不会报错
    mockObj.Method2();
}

在上面的示例中,我们创建了一个MockClass的mock对象mockObj,并使用EXPECT_CALL宏指定了对Method1的调用次数为1次,对Method2的调用次数为0次。在测试中,我们先调用了Method1,然后调用了Method2,但由于Method2的调用次数为0次,所以不会报错。

总结一下,如果不希望某个mock对象调用其他mocking方法,可以使用NiceMock来创建一个“友好”的mock对象,它会忽略未定义的调用,并且不会报错。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云产品:https://cloud.tencent.com/product
  • 腾讯云云原生产品:https://cloud.tencent.com/solution/cloud-native
  • 腾讯云音视频处理产品:https://cloud.tencent.com/product/mps
  • 腾讯云人工智能产品:https://cloud.tencent.com/product/ai
  • 腾讯云物联网产品:https://cloud.tencent.com/product/iotexplorer
  • 腾讯云移动开发产品:https://cloud.tencent.com/product/mobdev
  • 腾讯云存储产品:https://cloud.tencent.com/product/cos
  • 腾讯云区块链产品:https://cloud.tencent.com/product/baas
  • 腾讯云元宇宙产品:https://cloud.tencent.com/product/mu
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Google 单元测试框架

编译 lib 到 github 拉取代码或者下载某个版本的 zip 包到本地目录,参考 gtest 中的 README.md 如何编译库和编译自己的代码,下面简单介绍下编译方法 手动编译 $ g++ -...gmock 需要依赖 gtest 使用,在测试中,当我们测试的对象需要依赖其他模块、接口,但是往往受条件限制无法使用真实依赖的对象,通过 mock 对象来模拟我们需要依赖,以协助测试本模块,mock 对象具有和真实对象一样的接口...,但是我们可以在运行时指定他的行为,如何被使用,使用多少次、参数,使用时返回什么等。...编译 编译说明 gmock 编译需要依赖 gtest, 准备好 gtest 和 gmock (同一个版本)后,手动编译的方法如下: 设置好 gtest 和 gmock 的工程路径,或者在下面命令中直接替换源路径...libgtest.a gmock 测试程序 参考 gmock 编程指导和 codebook gmock mock 对象,可以定义函数期望行为,如被调用时返回的值,期望被调用的次数,参数等,如果不满足就会报错

2.1K20

gtest单元测试框架介绍及简单使用

googletest.googlecode.com/files/gtest-1.3.0.zip GitHub - google/googletest: GoogleTest - Google Testing and Mocking...默认下载安装的是32位的,若需要64位的则指定.\vcpkg.exe install gtest:x64-windows ....在调用这个方法(函数)后得到输出数据,然后检查输出的数据是否与我们期望的结果是一致的。若一致则说明这个方法的逻辑是正确的,否则就有问题。...在对输出结果进行检查(check)时,Gtest为我提供了一系列的断言(assertion)来进行代码测试,这些宏有点类似于函数调用。...我们之前的做法通常是写一个通用方法然后编写在测试案例调用它。即使使用了通用方法,这样的工作也是有很多重复性的。

3.1K32

CC++生态工具链——接口模拟工具gmock

gmock可以快速轻松地定义模拟对象,模拟对象提供与真实对象相同的接口。gmock允许开发者定义模拟对象的行为,例如调用哪些方法,以什么顺序,调用多少次,传哪些参数,返回什么样的值等等。...五,如何获取gmock 获取gmock,需要下载并编译GoogleTest开源库的源代码: git clone https://github.com/google/googletest cd googletest...第4个参数(Specs)为限定符: const——重写const方法时需要带上 override——覆盖virtual方法时需要带上 noexcept——重写noexcept方法时需要带上 b.定义预期行为...,比如该方法调用一次返回什么值 WillRepeatedly(action):缺省/重复行为 代码样例: using ::testing::Return; ...EXPECT_CALL(turtle,...WillOnce(Return(100)) .WillOnce(Return(150)) .WillRepeatedly(Return(200)); 具体含义: turtle对象的GetX()方法将被调用五次

2.2K30

gtest整理_softest

目录 简介 使用目的 使用时机 使用方法 使用流程 传入参数 用法 最简单的单元测试 普通测试夹具 模板测试夹具 参数测试夹具 宏定义总结 测试宏 声明宏 断言宏 gmock 使用心得 简介 gtest...一个程序有不同模块相互耦合,某个模块未完成可能影响其他已完成模块的测试,这时可以利用gmock 隔离 这些模块,模拟未完成模块的功能,进而测试已完成模块的逻辑。 每完成一个模块就用gtest进行验证。...使用方法 使用流程 包含必要的头文件:声明了待测试代码的头文件、“gtest/gtest.h”、“gmock/gmock.h”(使用模拟时会用到)。...但是如果我们只希望部分函数按照顺序执行而不关心其他部分的顺序呢,可以定义多个 Sequence 类型对象,所有调用 .InSequence 的 EXPECT_CALL 都将按照声明的顺序调用,上代码。...,这种使用方法在需要指定大量重复函数时很有用。

1.3K20

C++雾中风景番外篇2:Gtest 与 Gmock,聊聊C++的单元测试

安装 Gtest 和 GMock 十分简单: sudo apt-get install libgtest-dev libgmock-dev 其他发行版如:Ubuntu,Centos 应该也可以通过自带的包管理软件就可以完成安装了...看起来EXPECT会更加灵活一些,尤其是需要释放一些资源或执行一些其他逻辑时,更适合用EXPECT。...至于如何使用 Mock Object 呢?这里要引出本章的主角 Gmock 了,接下来笔者将编写一个简要的 Mock对象并进行单元测试,来展示一下 GMock 的用法。...通过链式调用的方式,我们就可以构造出所有我们想要的模拟结果。当然如果每次调用的结果都一样,这里也可以使用WillRepeatedly直接返回对应的结果。...这里要注意,在通过 Gmock 来编写 Mock Object 时,能够模拟的方法是对于原抽象类之中的virtual 方法

4.3K51

依赖注入是否值得?

据Proffitt认为,DI流行的唯一原因是Mocking。 DI进来这么流行的真实原因,和正交性、封装性或者其他“纯粹的”架构考量都没有关系。...Kohari解释在大多数情况下,如何创建和注射特定类型的对象只需要配置一次,而且是由框架完成的,不是由调用者。 Kohari还谈到了代码的变化能力: ……简单来说,依赖注入让你的代码更容易改变。...你不能用静态方法,不能用“new”关键字,不能用封闭类型。哦,你还要把所有的方法都变成虚拟的。 他还争辩说,仅仅为了方便变化而使用DI,违背了YAGNI原则。...我们应不应该改变代码的可见性?我们应不应该改变代码的设计?这个问题导致了可测试的代码与OO封装性之间的冲突。开发者们开始为了能够测试,而把代码中的私有部分暴露出来。...开头只是私有方法和属性,现在扩大到了整个设计。 这是一个老问题了。有些人认为改变代码让它更容易测试是一件好事;其他人认为这样做打破了封装性,因此是坏事。

75290

基于 hook 和 gmock 开展单元测试

四、遇到的问题与解决方案 (1)类的private、protected函数,外部测试类无法调用 开发在设计类时,对于不想让外部类访问的属性以及方法都可以定义为私有的,这并没有什么设计上的问题,但对于测试而言...代码如下图5: 图5private可访问 (2)对回调函数的测试 对于C++中的异步回调,可以采用异步变同步的方法,保证该调的时候可以正常的调用。...C++允许用基类的指针来调用子类的函数,举个例子,就很容易明白了,如图6: 图6基类指针调子类函数 非虚函数不具备这样的特性,无法很方便的使用gmock。...如何解决?——Hook 提到hook,就不得不提百度在11年开源的Baiduhook,其提供了linux平台下C/C++程序的hook功能, 可以解决gmock只能mock虚函数的限制。...(3)SDK测试除了要保证接口本身的功能外,更多的还要关心第三方使用者会如何用,即调用场景。UT不需要关心外部如何调,更加聚焦函数本身。

5.2K30

protobuf详解

protobuf是一种灵活高效的独立于语言平台的结构化数据表示方法。在通信协议和数据存储等领域中使用比较多。protobuf对于结构中的每个成员会提供set系列函数和get系列函数。...github.com/google/protobuf (1) 安装依赖 如官网所列,protoc有如下依赖:Autoconf,automake,libtool,curl,make,g++,unzip,gmock...其中gmock依赖于libtool。 (2) 源码下载 ? (3) 源码编译 ?...获取proto二进制文件的连接:https://github.com/protocolbuffers/protobuf/releases (1) 下载指定版本的二进制包 (2) 解压指定PATH路径...(4) 反序列化protobuf 将已经序列化的二进制流反序列化,同样也是调用protobuf提供的内置函数。针对于c++,protobuf提供了如下几种常用的反序列化函数: ?

22.1K73

测试 View Controllers

Mocking 当你把一个整体拆分成小零件(比如更小的类)时,我们可以针对每个小的类来进行测试。但由于我们测试的类会和其他类交互,这里我们用一个所谓的 mock 或 stub 来绕开它。...另外,-expect 方法也告诉 mock 这个调用必须发生。当我们稍后在 mock 上调用 -verify 时,如果那个方法没有被调用过,测试就会失败。...相应地,-stub 方法也用来设置 mock 对象,但它不关心方法是否被调用过。 现在,我们要触发代码运行。我们就调用我们希望测试的方法。...我们再次使用 mocking 来让测试尽可能不依赖于其他部分。...如果你看看 -[PhotosViewController setupTableView]方法的源码,你就会看到它是如何从 app delegate 中取出 model 对象的。

70520

【Rust日报】2023-11-13 异步 Rust 中的模拟测试

异步 Rust 中的模拟测试 这篇文章介绍了在异步 Rust 中进行模拟测试(mocking)的方法。...文章分为三个部分: 简单模拟测试: 通过使用 mockall crate,作者展示了如何对同步代码进行简单的模拟测试。...异步模拟测试不当的例子 作者介绍了在处理异步代码时,如果不注意宏的调用顺序,可能会导致复杂的代码和 Future 类型的实现。...正确的异步模拟测试方法: 作者提出了解决异步模拟测试困境的更好方法,即先生成模拟实现,然后添加异步支持。 通过正确的宏调用顺序,可以更简洁地进行异步模拟测试。...原文链接 https://medium.com/vortechsa/mocking-in-async-rust-248b012c5e99 rusqlite: 0.30版本发布 rusqlite 是 sqlite

16830

面向 C++ 的现代 CMake 教程(三)

我们现在知道如何处理一些基本情况,以及我们可以研究哪些其他方法来处理更复杂的情况。 最后,我们研究了如何利用链接器为我们的程序准备测试——将main()函数分离到另一个翻译单元中。...存根为方法调用提供特定的、预先录制的回答,限于测试中使用的回答。它还可以记录调用了哪些方法以及发生了多少次。 模拟是存根的一个更扩展版本。它还将验证测试期间方法是否如预期地被调用。...在我们的测试用例中,我们对rng_mock_的Get()方法调用 GMock 的EXPECT_CALL宏。这告诉框架,如果在执行过程中没有调用Get()方法,则测试失败。...Times链式调用明确指出,为了测试通过,必须发生多少次调用。WillOnce确定在方法调用后,模拟框架做什么(它返回3)。 借助 GMock,我们能够一边表达期望的结果,一边表达被模拟的行为。...开始使用 GMock 的一个好地方是官方文档中的Mocking for Dummies页面(你可以在进阶阅读部分找到这个链接)。

19000

Mocking技术进行MySQL数据库的单元测试(Go版)

特别是当我们的代码涉及到外部资源(如数据库)时,使用模拟(Mocking)技术进行单元测试更显得尤为重要。因为这样可以使我们的测试更加稳定,因为我们的测试不再依赖外部资源的状态。...本文就以Go为例,来演示如何使用Mocking技术进行MySQL数据库的单元测试。 GoMock工具 在Go中,我们可以使用GoMock工具来创建模拟对象。...GetUser方法并传入1作为参数时,返回预设的用户信息。...这样,当userService.GetUser(1)被调用时,它实际上是调用的模拟对象的GetUser方法,因此会返回我们预设的结果。...总的来说,使用Mocking技术进行数据库的单元测试,可以帮助我们解耦测试和外部资源,使得测试更加稳定,更加可控。这对于确保我们的代码质量,提高我们的开发效率,都有着非常重要的作用。

44220
领券