简单的测试用例
class Base {
public:
virtual int Foo() = 0;
};
class MockBase : public Base {
public:
MOCK_METHOD0(Foo, int());
};
void TestMethod(std::unique_ptr<Base> b) { b->Foo(); }
TEST(BaseTest, Normal) {
auto mock_base = std::make_unique<NiceMock<MockBase>>();
EXPECT_CALL(*mock_base, Foo()).WillOnce(Return(1));
TestMethod(std::move(mock_base));
}
GoogleMock报告
错误:应删除此模拟对象(在测试BaseTest.Normal中使用),但绝不能删除。它的地址是@ 0x556d76a078c0。 错误:在程序出口发现1个泄漏的模拟对象。销毁模拟对象时,会验证对对象的期望。泄漏模拟意味着未验证其期望,这通常是测试错误。如果您确实打算泄漏模拟,可以使用testing :: Mock :: AllowLeak(mock_object)抑制此错误,或者可以使用伪造或存根代替模拟。
在我的期望中,模拟对象将由unique_ptr自动删除。我会错过什么吗?