c++ - 尝试模拟纯虚拟类

标签 c++ googletest googlemock

我正在尝试使用 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 引起的,但我不知道它有什么问题。

最佳答案

来自Google Mock Cookbook :

SetArgPointee() conveniently makes an internal copy of the value you pass to it, removing the need to keep the value in scope and alive. The implication however is that the value must have a copy constructor and assignment operator.

在您的情况下,Mock_I_Circle 类缺少复制构造函数和赋值运算符。添加这些将修复编译错误。话虽如此,我不清楚您编写的测试的目的。

关于c++ - 尝试模拟纯虚拟类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49275349/

相关文章:

c++ - 监控自身进程的内存使用情况

c++ - 如何在没有无限循环的情况下使用 CMake 的 add_subdirectory

c++ - 为什么我需要第二个参数?

c++ - 如何在 Google Mock 中模拟返回类型为 unique_ptr 的方法?

c++ - 在 Visual Studio 中关闭运行时检查

C++ stat(const char *d_name) 总是返回 -1

c++ - #include 指令的限制范围

c++ - Google Mock 单元测试静态方法 c++

c++ - 如何通过conan使用gtest

c++ - Google-Mock 一个已经声明的方法