3
IEmployeeServiceProxy* empSvcMock = m_Mocks.InterfaceMock<IEmployeeServiceProxy>();
m_EmpSvcMock.reset(empSvcMock); // shared_ptr because my class Client ctor expects a shared_ptr<IEmployeeServiceProxy>

Client client(m_EmpSvcMock);

如何防止 m_EmpSvcMock 在内部被 HippoMock 破坏?将模拟传递给 shared_ptr 时,两者都会破坏模拟。

编辑 - 答案:

m_Mocks.ExpectCallDestructor(m_EmpSvcMock.get());
m_EmpSvcMock.reset();
4

2 回答 2

2

使用这样的助手,它创建一个带有无操作删除器的 shared_ptr :

template< class T >
void NoDelete( T* )
{
}

template< class T >
std::shared_ptr< T > make_shared_ref( T* t )
{
  return std::shared_ptr< T >( t, NoDelete< T > );
}

  //usage
m_EmpSvcMoc = make_shared_ref( empSvcMock );
于 2012-08-02T07:37:41.983 回答
2

在 Git 版本(来自 Assembla)中,您可以告诉它注册要调用的析构函数。额外的好处是它会警告您在此之后使用 ZombieMockException 调用的函数,因此如果您确实在某处泄漏了一个指针并且它被使用了,您将知道一个可读的错误。

于 2012-08-02T07:53:02.140 回答