【发布时间】:2018-03-14 10:31:43
【问题描述】:
我试图用 google mock 在纯虚拟类中模拟一个函数。这是我的代码:
class I_Circle
{
private :
public:
virtual ~I_Circle() {}
virtual void GetClone(I_Circle * k) = 0;
};
class Mock_I_Circle : public I_Circle
{
public:
Mock_I_Circle() {}
virtual ~Mock_I_Circle() {};
MOCK_METHOD1(GetClone, void(I_Circle* k));
};
TEST(CircleTest, secondTest) {
NiceMock<Mock_I_Circle> iCircle;
Mock_I_Circle* pICircle = &iCircle;
EXPECT_CALL(iCircle, GetClone(_))
.WillOnce(
SetArgPointee<0>(*pICircle)
);
iCircle.GetClone(pICircle);
Mock::VerifyAndClear(&iCircle);
}
使用此实现,我收到以下错误:
Error C2280 'testing::PolymorphicAction<testing::internal::SetArgumentPointeeAction<0,Mock_I_Circle,false>>::PolymorphicAction(const testing::PolymorphicAction<testing::internal::SetArgumentPointeeAction<0,Mock_I_Circle,false>> &)': attempting to reference a deleted function MockInterface c:\source\googletest\googlemock\include\gmock\gmock-actions.h 1110
这里要删除什么函数?问题似乎是由带有 SetArgPointee 的 EXPECT_CALL 引起的,但我不知道它有什么问题。
【问题讨论】:
-
这个测试毫无意义,因为你正在尝试测试你的模拟类,而不是真正的实现。请阅读有关测试和模拟类的一般信息。
-
这显然是正确的,但我尽量让示例保持简单。
标签: c++ googletest googlemock