Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 希波莫克坚持要摧毁莫克_C++_Unit Testing_Mocking_Hippomocks - Fatal编程技术网

C++ 希波莫克坚持要摧毁莫克

C++ 希波莫克坚持要摧毁莫克,c++,unit-testing,mocking,hippomocks,C++,Unit Testing,Mocking,Hippomocks,使用这样一个帮助器,它创建了一个带有无操作删除器的共享\u ptr: m_Mocks.ExpectCallDestructor(m_EmpSvcMock.get()); m_EmpSvcMock.reset(); 模板 无效节点(T*) { } 模板 std::shared_ptrmake_shared_ref(T*T) { 返回std::shared_ptr(T,NoDelete); } //用法 m_EmpSvcMoc=使_共享_参考(EmpSvcMoc); 在Git版本(来自Assemb

使用这样一个帮助器,它创建了一个带有无操作删除器的共享\u ptr:

m_Mocks.ExpectCallDestructor(m_EmpSvcMock.get());
m_EmpSvcMock.reset();
模板
无效节点(T*)
{
}
模板
std::shared_ptrmake_shared_ref(T*T)
{
返回std::shared_ptr(T,NoDelete);
}
//用法
m_EmpSvcMoc=使_共享_参考(EmpSvcMoc);

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

是的,我知道这个“解决方案”(hack),但我希望HippoMock的作者会评论隐式管理mock释放的必要性。顺便说一句,你的意思是m_EmpSvcMock=make_shared_ref(EmpSvcMock);所以,当将mock传递给共享的_ptr时,我们应该只注册一个NOP析构函数?你能给我一个例子吗?当把它传递给一个共享指针时,你希望在测试结束时,但在模拟验证之前调用析构函数。那么,告诉模拟存储库,你就没事了。这是对它的单元测试,它显式地删除了它,但这相当于最后一个被破坏的共享指针。@dascandy:这很有趣!从unittest来看,Git版本应该只与shared_ptr一起工作。
m_Mocks.ExpectCallDestructor(m_EmpSvcMock.get());
m_EmpSvcMock.reset();
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 );