8

我在使用 google mock 将函数参数与特定对象匹配时遇到问题。

考虑以下代码:

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

    void myMethod(const Bar& bar);
}

现在我有一些测试代码,它可能看起来像这样:

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

所以我想确保当调用 Foo::myMethod 时,参数看起来像我本地实例化的 bar 对象。

当我尝试这种方法时,我收到一条错误消息,例如:

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)

我尝试使用 Eq(ByRef(bar)) 定义运算符 == 和 != (至少 == 两者都是自由函数的成员),但我无法解决问题。唯一有帮助的是使用

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

但这样我必须检查我的结构中的每个字段,这看起来像是很多打字工作......

4

1 回答 1

8

好的,那我会回答自己:

您必须为 Foo::Bar 提供 operator== 实现:

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

不要将它作为成员函数添加到 Foo::Bar 中,而是使用自由函数。

而且,吸取的教训,小心不要将它们放入匿名命名空间。

于 2013-06-21T12:56:26.983 回答