我正在使用 VS2005 和 C++ 使用 google mock 进行单元测试。
我在单元测试中有一个全局自由函数,我使用以下代码来模拟自由函数:
NiceMock <MockA> mockObj;
struct IFoo {
virtual A* foo() = 0;
virtual ~IFoo() {}
};
struct FooMock : public IFoo {
FooMock() {}
virtual ~FooMock() {}
MOCK_METHOD0(foo, A*());
};
FooMock fooMock;
// foo() implementation
A* foo() {
return fooMock.foo();
}
In the SetUp()
函数,我对全局对象设置期望,例如
EXPECT_CALL(fooMock,foo())
.Times(1)
.WillOnce(Return(&mockObj));
TEST(..., instA) {
// ...
}
and in TearDown()
,我删除全局模拟对象fooMock
virtual TearDown(){
delete &fooMock;
}
当我运行代码时,出现以下错误
错误:xyz.instA 内存泄漏,
also,
0 个空闲块中有 0 个字节。
-1 个普通块中的 -61 字节。
7 个 CRT 块中的 68 字节。
0 个忽略块中有 0 个字节。
0 个客户端块中有 0 个字节。
最大使用数:11025字节
总分配量:50602 字节。
谁能告诉我这里发生了什么?如果我不删除fooMock
,我收到错误“fooMock 应该被删除,但从未被删除”,或检测到堆损坏。
从错误中,我可以看到我的堆在某个地方被错误处理,但我找不到重点。我也尝试过一步步调试。
一些帮助真的很棒! :)