HippoMocks坚持要摧毁Mock

HippoMocks insists on destroying mock

本文关键字:Mock 摧毁 坚持 HippoMocks      更新时间:2023-10-16
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被河马内部破坏?将模拟传递给shared_ptr时,两者都会破坏模拟。

编辑 - 答案:

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

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

使用如下帮助程序,它会创建一个带有无操作删除器的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 );