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

次のようなヘルパーを使用します。これは、no-op デリータで 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 に答える