使用抽象基类引用调用google mock中的函数会给出num arguments错误

Sah*_*hil 5 compilation mocking googletest googlemock

我有一个谷歌模拟EXPECT_CALL宏的问题.以下代码给出了EXPECT_CALL语句的编译错误:

错误C2660:'testing :: Eq':函数不带1个参数\ gmock-1.6.0\include\gmock\gmock-matchers.h

基本上我有一个容器的基本容器和基础数据对象,包括abstract和一个缓存,它有一个指向基本容器的指针和一个引用基础数据对象的Add方法.我已经创建了一个基本程序来演示这个问题.非常感谢,如果有人可以提供帮助.

#include "gtest/gtest.h"
#include "gmock/gmock.h"

namespace
{
class BaseData
{
    public:
    virtual void SetValue(const int value) = 0;
};

class BaseContainer
{ 
    public:
    virtual void Add(const BaseData& data) = 0;
};



class MockContainer : public BaseContainer
{
public:
    MOCK_METHOD1(Add, void (const BaseData& data));
};

class MockData : public BaseData
{
public:
    MOCK_METHOD1(SetValue, void (int));
};

class Cache
{
    private:
    BaseContainer* container;
    public:
    Cache(BaseContainer* c)
    {
        container = c;
    }
    ~Cache()
    {
    }

    void AddToContainer(const BaseData& data)
    {
        container->Add(data);
    }
};

class CacheTestFixture : public ::testing::Test
{
protected:
    CacheTestFixture() {}

    virtual ~CacheTestFixture() {}

    virtual void SetUp() {}

    virtual void TearDown() {}

};

TEST_F(CacheTestFixture, TestAdd)
{
    MockData data;
    MockContainer container;
    EXPECT_CALL(container, Add(data)).WillRepeatedly(::testing::Return());
    Cache c(&container);
    ASSERT_NO_THROW(c.AddToContainer(data));
}
}

int _tmain(int argc, _TCHAR* argv[])
{
::testing::InitGoogleMock(&argc, argv);

return RUN_ALL_TESTS();
}
Run Code Online (Sandbox Code Playgroud)

Sah*_*hil 10

EXPECT_CALL(container, Add(testing::Ref(data))).WillRepeatedly(::testing::Return());
Run Code Online (Sandbox Code Playgroud)

要将模拟实现作为基类引用发送,testing::Eq需要==在抽象基类上实现运算符,这是不可取的.