c++ - Gmock - 匹配结构

标签 c++ googlemock

如何为输入参数匹配 union 中元素的值,例如 - 如果我模拟具有以下签名的方法 -

    struct SomeStruct
    {   
        int data1;
        int data2; 
    };

    void SomeMethod(SomeStruct data);

我如何才能匹配调用此方法的 mock,并在参数中使用正确的值?

最佳答案

在详细阅读了 Google mock 文档之后,我解决了我在 Defining Matchers 中记录的问题部分。 (一个例子会很棒!)

因此解决方案是使用 MATCHER_P 宏来定义自定义匹配器。所以对于匹配的 SomeStruct.data1 我定义了一个匹配器:

MATCHER_P(data1AreEqual, ,"") { return (arg.data1 == SomeStructToCompare.data1); }

为了符合预期,我使用了这个自定义宏,如下所示:

EXPECT_CALL(someMock, SomeMethod(data1AreEqual(expectedSomeStruct)));

这里,expectedSomeStruct 是我们期望的structure.data1 的值。

请注意,正如其他答案(在这篇文章和其他文章中)所建议的那样,它需要更改被测单元以使其可测试。那应该没有必要!例如。重载。

关于c++ - Gmock - 匹配结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23938233/

相关文章:

c++ - 以下代码是否运行两个从 C++ 中的单个父进程并行执行的子进程?

c++ - 使用删除时随机崩溃

c++ - 如何在 gmock expect_call 中对结构参数进行部分匹配

c++ - 如何使用(Google Mock)模拟类作为模板参数

c++ - 尝试在 GMock 代码中使用 WithArg;错误说它不存在

c++ - 在 Gmock 的 EXPECT_CALL 之前使用 ON_CALL 时的奇怪行为

c++ - 如何使用 google mock 在 C++ 中模拟继承链

c++ - FreeType "generic"与 c++/cx 关键字冲突

c++ - 如何使用类型列表

c++ - 处理比较 : empty classes vs. 未定义类与 void*