Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ GMock不';t编译,具有用户类型引用参数的虚拟函数_C++_Reference_Virtual_Googlemock_Gmock - Fatal编程技术网

C++ GMock不';t编译,具有用户类型引用参数的虚拟函数

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

我试图模拟一个抽象类,但我不断从GMock头中得到编译错误。我无法共享实际代码,但与bellow几乎相同。模拟工作正常,但我必须更改“DoStuff”函数以获取对象,而不是引用。从那以后,它就不再编译了。该错误类似于*GMock无法将“Element”与long*进行比较

"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())谢谢那就更好了!