MOCK一个接受unique_ptr的方法
MOCK a method that accepts unique_ptr
我有以下需要模拟的类:
#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
还可以查看文档"使用仅移动类型的模拟方法",以获得更多示例和更详细的解释。(似乎早期的食谱现在已经断了一个环节。(
一个稍长的例子可以在另一个SO对一个被标记为重复的问题的回答中找到。(很难认为标题是重复的,因为一个标题提到了返回值,另一个提到了函数参数。但答案中的内容基本相同,涵盖了两种用例:返回类型和函数参数。(
相关文章:
- 为什么 std::unique 不调用 std::sort?
- CLANG 编译器 说:变量"PTR"可能未初始化
- 在以唯一ptr为值的C++映射中,动态内存何时会被销毁
- 将 ptr 传递给 ptr 到 A 作为参数传递给 A 的函数是不好的做法吗?
- 为共享 ptr 向量实现复制 c'tor?
- 字符和整数中 **(ptr+1) 的值差异
- C++:在不中断共享的情况下通过引用传递共享 PTR?
- 生成"unique"矩阵
- 如何将派生类从基 ptr 分配给 nlohmann::json
- 引用 std::shared:ptr 以避免引用计数
- 我对 std::unique(算法)C++有问题
- 为什么我不能在不进行任何转换的情况下将浮点数放入任何类型的 ptr 中?
- 在调用函数时,ptr** 和 ptr*& 之间是否有区别,或者首选C++?
- 另一种类型的智能ptr,比如具有弱refs的unique_ptr
- 尝试打印出 *ptr++ 的值,以了解它是如何工作的
- 如何控制共享 ptr 引用计数?
- std::shared_ptr::unique(),复制和线程安全
- 如何在C++03中用自定义谓词调用std::unique
- C++中的指针否定 (!ptr == NULL)
- C++14 unique_ptr并使用已删除的函数'std::unique-ptr' unique_ptr错误