2013-06-21 24 views
4

我有一个问题,使用谷歌模拟将函数参数匹配到特定的对象。googlemock中自定义类型的匹配参数

考虑下面的代码:

class Foo 
{ 
public: 
    struct Bar 
    { 
     int foobar; 
    } 

    void myMethod(const Bar& bar); 
} 

现在我有一些测试代码,它看起来是这样的:

Foo::Bar bar; 
EXPECT_CALL(fooMock, myMethod(Eq(bar)); 

所以我想确保当富:: myMethod的被称为,该参数看起来像我本地实例化的条形对象。

当我尝试这种方法,我得到这样一个错误信息:

gmock/gmock-matchers.h(738): error C2678: binary '==' : no operator found which takes a left-hand operand of type 'const Foo::Bar' (or there is no acceptable conversion) 

我试图定义的==操作符和玩弄=(至少==作为游离功能的成员),用公式(ByRef(bar)),但我无法解决这个问题。帮助使用

Field(&Foo::Bar::foobar, x) 

但这种方式我要检查我的struct各个领域,这似乎像很多输入的工作的唯一的事情...

+0

我从来没有与正确定义'运营商=='免费的功能问题。你的签名是否正确? – arne

+0

请发布您的'operator =='定义和错误消息。 –

+0

布尔操作符==(const Foo :: Bar&first,const Foo :: Bar&second) – anhoppe

回答

4

好吧,那我就回答我自己:

您必须提供美孚::酒吧运营商==实现:

bool operator==(const Foo::Bar& first, const Foo::Bar& second) 
{ 
    ... 
} 

不要将其添加为成员函数美孚::酒吧,但使用免费的功能。

而且,总结经验教训,小心把它们(UPDATE:)为匿名命名空间;-)

+0

您的意思是“ **不**把他们放到一个匿名的命名空间“? – Fraser

+0

;-)你是对的,那会更好。 – anhoppe

+0

它必须位于Foo所在的同一个命名空间中。 – arhuaco