Compilation 使用抽象基类引用在GoogleMock中调用函数时出现num参数错误
我对google mock EXPECT_CALL宏有一个问题。 以下代码给出EXPECT\u CALL语句的编译错误: 错误C2660:“testing::Eq”:函数不接受1个参数 \gmock-1.6.0\include\gmock\gmock matchers.h 基本上,我有一个基本容器和该容器的基本数据对象,包括抽象和缓存,缓存有一个指向基本容器的指针和一个引用基本数据对象的Add方法。我创建了一个基本程序来演示这个问题。如果有人能帮忙,非常感谢Compilation 使用抽象基类引用在GoogleMock中调用函数时出现num参数错误,compilation,mocking,googletest,googlemock,Compilation,Mocking,Googletest,Googlemock,我对google mock EXPECT_CALL宏有一个问题。 以下代码给出EXPECT\u CALL语句的编译错误: 错误C2660:“testing::Eq”:函数不接受1个参数 \gmock-1.6.0\include\gmock\gmock matchers.h 基本上,我有一个基本容器和该容器的基本数据对象,包括抽象和缓存,缓存有一个指向基本容器的指针和一个引用基本数据对象的Add方法。我创建了一个基本程序来演示这个问题。如果有人能帮忙,非常感谢 #include "gtest/gt
#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();
}
您需要使用
::testing::Eq(ByRef(data))
::testing::Eq
是需要使用的匹配器,请在上阅读有关匹配器的信息
要将模拟实现作为基类引用发送,
testing::Eq
需要在抽象基类上实现=
运算符,这是不可取的。黑洞的答案是正确的,您必须使用
::testing::Eq(ByRef(data))
但是为了获得正确的copmarison,您必须为BaseData定义运算符==,因为它是一个抽象类。您可以在测试代码中作为免费函数执行此操作:
bool operator==(const BaseData& left, const BaseData& right)
{
return ...;
}
我曾经问过一个类似的问题,请看,我也试过,但这并不能解决问题。如果我这样做,我仍然会得到错误:“bool testing::internal::operator=(T*,const testing::internal::linked_ptr&”):无法从“const BaseData”推断出“T*”的模板参数只是一个问题-用于
SetValue
的MOCK_方法是否需要const int
而不是int
?
bool operator==(const BaseData& left, const BaseData& right)
{
return ...;
}