首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Gmock匹配结构

Gmock匹配结构
EN

Stack Overflow用户
提问于 2014-05-29 16:30:48
回答 5查看 57.3K关注 0票数 19

如何匹配输入参数的联合元素的值,例如,如果我模拟具有以下意义的方法-

代码语言:javascript
复制
    struct SomeStruct
    {   
        int data1;
        int data2; 
    };

    void SomeMethod(SomeStruct data);

如何匹配调用此方法的模拟,并在参数中使用正确的值?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-06-03 11:45:16

在详细阅读了Google模拟文档之后,我解决了定义匹配部分中记录的问题。(举个例子就太好了!)

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

代码语言:javascript
复制
MATCHER_P(data1AreEqual, ,"") { return (arg.data1 == SomeStructToCompare.data1); }

为了匹配它,我使用了这样的自定义宏:

代码语言:javascript
复制
EXPECT_CALL(someMock, SomeMethod(data1AreEqual(expectedSomeStruct)));

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

注意,正如在其他答案中所建议的那样(在本文和其他文章中),它要求被测试的单元进行更改以使其可测试。那不应该是必要的!例如超载。

票数 31
EN

Stack Overflow用户

发布于 2016-12-05 12:42:37

如果需要显式测试结构中的一个字段(或类的一个“属性”)的特定值,则使用" field“和"property”定义来测试这一点。有结构的:

代码语言:javascript
复制
EXPECT_CALL( someMock, SomeMethod( Field( &SomeStruct::data1, expectedValue )));

或者,如果我们有SomeClass (SomeStruct的整数),那么它具有私有成员变量和公共getter函数:

代码语言:javascript
复制
EXPECT_CALL( someMock, SomeMethod( Property( &SomeClass::getData1, expectedValue )));
票数 18
EN

Stack Overflow用户

发布于 2014-05-29 21:07:21

Google提供了一些关于使用gmock的很好的文档,包含了大量的示例代码。我强烈建议你检查一下:

Book.md#

正如您所指出的,默认的等式运算符(==)不是为类类型(包括荚)自动创建的。由于此运算符在匹配参数时由gmock使用,因此您需要显式地定义它,以便像使用任何其他类型一样使用该类型(如下所示):

代码语言:javascript
复制
    // Assumes `SomeMethod` is mocked in `MockedObject`
    MockedObject foo;
    SomeStruct expectedValue { 1, 2 };

    EXPECT_CALL(foo, SomeMethod(expectedValue));

因此,处理这个问题最简单的方法是为结构定义一个相等操作符:

代码语言:javascript
复制
struct SomeStruct
{   
    int data1;
    int data2; 

    bool operator==(const SomeStruct& rhs) const
    {
        return data1 == rhs.data1
            && data2 == rhs.data2;
    }
};

如果您不想走这条路,可以考虑使用场匹配来根据其成员变量的值匹配参数。(但是,如果测试想要比较结构实例之间的相等性,这就很好地表明了其他代码也会感兴趣。因此,仅仅定义一个operator==并完成它可能是值得的。)

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23938233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档