C++ Google Mock返回void但接受std::unique\u ptr的方法

C++ Google Mock返回void但接受std::unique\u ptr的方法,c++,mocking,gmock,C++,Mocking,Gmock,我想知道是否可以使用gmock框架来模拟一个方法,该方法采用唯一的\u ptr,只向前声明类型: class A; class interface { virtual void SetA(std::unique_ptr<A>) = 0; }; class GmockInterface { MOCK_METHOD(void, SetA, (std::unique_ptr<A>), (override)); }; A类; 类接口 { 虚空集(std::

我想知道是否可以使用gmock框架来模拟一个方法,该方法采用唯一的\u ptr,只向前声明类型:

class A; 

class interface
{
   virtual void SetA(std::unique_ptr<A>) = 0;
};


class GmockInterface
{
   MOCK_METHOD(void, SetA, (std::unique_ptr<A>), (override));
};

A类;
类接口
{
虚空集(std::unique_ptr)=0;
};
类gmock接口
{
模拟方法(无效,SetA,(标准::唯一性(覆盖));
};
它抛出了一个错误see声明,因为它不知道如何销毁它,我尝试了使用unique_ptr的返回类型的技巧,但它不起作用

class GmockInterface
{
  MOCK_METHOD(void, SetAProxy, (A*));

  void SetA(std::unique_ptr<A> a) override
  {
     SetAProxy(a.release());
  }

};
类gmock接口
{
模拟法(void,SetAProxy,(A*);
无效SetA(std::unique_ptr a)覆盖
{
SetAProxy(a.release());
}
};

如果您愿意考虑使用另一种工具来实际生成模拟,那么《用户指南》中实际上有一个例子涵盖了一个非常类似(可能更复杂)的情况


您仍然可以使用Google Test进行测试,只需使用Mimicc作为单独的步骤为模拟生成源代码。

您的第二个版本,是否可以提供使用时看到的错误?(x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.27.29110\include\memory(2400):消息:编译类模板成员函数“void std::default_delete::operator()(_Ty*)时,使用1>[1>[1>\u Ty=A 1>]1>C:\Program Files(x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.27.29110\include\memory(2512):消息:请参阅正在编译的函数模板实例化“void std::default_delete::operator()(\u Ty*)noexcept const”,1>带有1>[1>\u Ty=A 1>]我恐怕MSVC就在这里,From:如果使用默认删除器,
T
必须在调用删除器的代码点处完成,这发生在析构函数、移动赋值运算符和重置成员函数的
std::unique_ptr
中。您需要
A
作为完整类型,因为
unique\u ptr
的析构函数将被调用(即使它是nullptr)。如果您不能包含before mock的定义,我想您可以将代理函数的定义移动到包含A之后?