C++ 模拟接受唯一\u ptr的方法

C++ 模拟接受唯一\u ptr的方法,c++,gmock,C++,Gmock,我有以下课程需要模拟: #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 MockCal

我有以下课程需要模拟:

#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>));
};
#包括
#包括
类回调
{
公众:
Callback():调用(0)
{}
void mcallback(std::unique\u ptr rply)
{
调用++;
}
uint32_t呼叫;
};
类MockCallBack:公共回调
{
公众:
模拟方法1(mcallback,void(std::unique_ptr));
};
我得到以下错误:

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>        ]
错误C2280:'std::unique_ptr::unique_ptr(const std::unique_ptr&'):尝试引用已删除的函数
1> 与
1>        [
1> _Ty=int
1>        ]

如何模拟相关函数?

您需要执行某种技巧,因为std::unique\u ptr是仅移动类:

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

    void mcallback(std::unique_ptr<int> rpely)
    {
         mcallbackMock(rpely.get())
    }
};
class-MockCallBack:公共回调
{
公众:
模拟方法1(mcallbackMock,void(int*);
void mcallback(std::unique\u ptr rply)
{
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
mockObject;
auto intPtr=std::使_唯一(3)
EXPECT_调用(mockObject、mcallbackMock(NotNull())//可以使用。次(1)和除电话以外的其他常规物品
mockObject.mcallback(intPtr)//将触发除上述调用之外的其他调用
还可以查看文档以获得更多示例和更详细的解释。(这似乎是一个断开的链接。)


一个被标记为这个问题重复的问题。(很难考虑标题重复,因为一个标题提到返回值,而另一个标题提到函数参数。但是答案中的内容基本上是相同的,并且覆盖了用例:返回类型和函数参数。)/p>这个问题不是引用问题的重复。这是关于在返回类型中使用
unique\u ptr
而不是作为参数类型,这就是这个问题的情况。