C++ GMock不';t编译,具有用户类型引用参数的虚拟函数
我试图模拟一个抽象类,但我不断从GMock头中得到编译错误。我无法共享实际代码,但与bellow几乎相同。模拟工作正常,但我必须更改“DoStuff”函数以获取对象,而不是引用。从那以后,它就不再编译了。该错误类似于*GMock无法将“Element”与long*进行比较C++ GMock不';t编译,具有用户类型引用参数的虚拟函数,c++,reference,virtual,googlemock,gmock,C++,Reference,Virtual,Googlemock,Gmock,我试图模拟一个抽象类,但我不断从GMock头中得到编译错误。我无法共享实际代码,但与bellow几乎相同。模拟工作正常,但我必须更改“DoStuff”函数以获取对象,而不是引用。从那以后,它就不再编译了。该错误类似于*GMock无法将“Element”与long*进行比较 "C++ code" using ::testing::NiceMock; class Element{}; class Foo { public: virtual void DoStuff(Elem
"C++ code"
using ::testing::NiceMock;
class Element{};
class Foo
{
public:
virtual void DoStuff(Element&) = 0;
};
class MockFoo : public Foo
{
public:
MockFoo() {};
MOCK_METHOD1(DoStuff, void(Element&));
};
TEST(example, test)
{
NiceMock<MockFoo> mf;
Element element{};
EXPECT_CALL(mf, DoStuff(element)).Times(1);
mf.DoStuff(element);
}
“C++代码”
使用::testing::NiceMock;
类元素{};
福班
{
公众:
虚空密度(元素&)=0;
};
MockFoo类:公共Foo
{
公众:
MockFoo(){};
模拟方法1(DoStuff、void(元素和元素);
};
测试(示例,测试)
{
尼斯莫克mf;
元素{};
期望调用(mf,DoStuff(元素))。次(1);
mf.DoStuff(元素);
}
看看
如果要检查是否通过mf.DoStuff
将完全相同的元素传递给模拟对象-请使用::testing::Ref
匹配器:
EXPECT_CALL(mf, DoStuff(Ref(element)));
(注意:该时间(1)是默认值-因此实际上没有必要)
如果要检查传递的对象是否具有完全相同的值-为其定义比较运算符-或使用适当的匹配器-如::testing::Property
-如:
EXPECT_CALL(mf, DoStuff(AllOf(Property(&Example::getX, expectedXValue),
Property(&Example::getY, expectedYValue))));
我猜您的确切问题是因为实际的
示例类是抽象的,并且/或者没有运算符==
-因此无法使用默认匹配器::testing::Eq
。感谢您的快速回复,我不需要确切的“元素”,我需要测试函数是否被调用。但再次感谢,我将尝试您的建议。您可以使用任何匹配器测试::
如果您只需要这些EXPECT_CALL(mf,DoStuff())代码>谢谢那就更好了!