c++ - MOCK 接受 unique_ptr 的方法

标签 c++ googlemock

我有下面的类需要模拟:

#include <gmock/gmock.h>
#include <gtest/gtest.h>
class Callback
{
public:
    Callback(): calls(0)
    {}
    void mcallback(std::unique_ptr<int> rpely)
    {
        calls++;
    }
    uint32_t calls;
};

class MockCallBack : public Callback
{
public:
    MOCK_METHOD1(mcallback, void(std::unique_ptr<int>));
};

我收到以下错误:

error C2280: 'std::unique_ptr<int,std::default_delete<_Ty>>::unique_ptr(const std::unique_ptr<_Ty,std::default_delete<_Ty>> &)': attempting to reference a deleted function
1>        with
1>        [
1>            _Ty=int
1>        ]

如何模拟相关函数?

最佳答案

您需要执行某种技巧,因为 std::unique_ptr 是仅移动类:

class MockCallBack : public Callback
{
public:
    MOCK_METHOD1(mcallbackMock, void(int*));

    void mcallback(std::unique_ptr<int> rpely)
    {
         mcallbackMock(rpely.get())
    }
};

然后你可以像这样使用它:

MockCallBack mockObject;
auto intPtr = std::make_unique<int>(3)

EXPECT_CALL(mockObject, mcallbackMock(NotNull())); //can use .Times(1) and other things as regular except call

mockObject.mcallback(intPtr); //will trigger except call above

另请查看文档 Mocking Methods That Use Move-Only Types以获得更多示例和更详细的解释。 (看来 an earlier cookbook 现在是一个损坏的链接。)

A slightly lengthier example can be found in another SO answer一个被标记为与此重复的问题。 (很难认为标题是重复的,因为一个标题提到了返回值,另一个标题提到了函数参数。但是答案中的内容本质上是相同的,并且涵盖了两种用例:返回类型和函数参数。)

关于c++ - MOCK 接受 unique_ptr 的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51704087/

相关文章:

c++ - 如何使 const 应用于作为共享指针的 C++ 类成员

segmentation-fault - EXPECT_CALL 上的 gmock 段错误

c++ - GMOCK如何为函数参数赋值

testing - 谷歌模拟 - 使用::测试::An()

c++ - 如何在不调用实现定义的行为的情况下将二进制数据写入文件?

c++ - 在 Qt 桌面应用程序中显示主窗体后执行操作

c++ - 当主应用程序处于 while 循环时,boost 线程未运行

c++ - 如何从跟踪器响应中获取对等方的 IP 和端口

c++ - 谷歌模拟单例 C++ 类

c++ - gmock 忽略 "interesting"函数调用