gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 17:01:11 33 4
gpt4 key购买 nike

我对 google 模拟 EXPECT_CALL 宏有疑问。
以下代码给出了 EXPECT_CALL 语句的编译错误:

error C2660: 'testing::Eq' : function does not take 1 arguments \gmock-1.6.0\include\gmock\gmock-matchers.h



基本上,我有一个基本容器和该容器的基本数据对象,包括抽象和缓存,它有一个指向基本容器的指针和一个引用基本数据对象的 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();
}

最佳答案

EXPECT_CALL(container, Add(testing::Ref(data))).WillRepeatedly(::testing::Return());

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

关于compilation - 使用抽象基类引用在 google mock 中调用函数会给出 num arguments 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18841044/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com