【发布时间】:2019-06-27 06:07:26
【问题描述】:
当我使用shared_ptr 将我的模拟对象存储在堆上时,期望得到满足并且指针被销毁,但 GMock 框架认为模拟对象仍然存在:
// Using a mock object
MockFoo foo;
EXPECT_CALL(foo, doSomething());
foo.doSomething();
// Test passes without warnings
// Using shared_ptr to a mock object
auto foo_sp = std::make_shared<MockFoo>();
EXPECT_CALL(*foo_sp, doSomething());
A a(std::move(foo_sp));
a.useFoo();
// a is then deleted
...
// in useFoo:
foo_sp->doSomething();
...
// Test passes WITH warnings that mock object is still alive
这是 Google 模拟框架中的错误吗?如果没有,那么如何将我的模拟对象存储在堆中的智能指针中并正确使用它?
【问题讨论】:
-
第二个示例中的
foo和mock是什么? -
我认为问题在更深的地方。简单的空类 MockFoo 没有给我任何警告......
-
感谢大家为我指明正确的方向。你是对的@sklott,这是模拟对象的所有者没有被破坏的问题(见我的回答)。
标签: c++ unit-testing googletest googlemock gmock