Matching arguments of custom type in googlemock

ぃ、小莉子 提交于 2019-12-10 13:49:08

问题


I have a problem matching a function argument to a specific object using google mock.

Consider the following code:

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

    void myMethod(const Bar& bar);
}

Now I have some testing code, it could look like this:

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

So I want to make sure that when Foo::myMethod is called, the argument looks like my locally instantiated bar object.

When I try this approach I get an error message like:

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)

I tried playing around with defining operator == and != (at least == both as member of free function), using Eq(ByRef(bar)) but I could not fix the issue. The only thing that helps is using

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

but this way I have to check every field in my struct which seems like a lot of typing work...


回答1:


Ok, then I'll answer to myself:

You have to provide an operator== implementation for Foo::Bar:

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

Don't add it as member function to Foo::Bar but use a free function.

And, lessons learned, be careful to NOT put them into an anonymous namespace.



来源:https://stackoverflow.com/questions/17232713/matching-arguments-of-custom-type-in-googlemock

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!