我正在使用VS2005和gmock 1.6。我面临着模拟自由全局功能的问题。我查看谷歌食谱,他们的解决方案要求我改变原始来源,我不想这样做。我试图使用全局模拟对象来模拟它,但在这种情况下,我得到内存泄漏或模拟对象应该被删除的错误,但从来没有。
所以,问题如下:
我有一个全局功能:
A* foo();
我有一个模拟课
class MockA : public A {
public:
MOCK_METHOD0 (bar1, bool());
MOCK_METHOD0 (bar2, bool());
};
在消息来源中,全局函数以下列方式使用:
if (foo()->bar1()){
// do something
}
if (foo()->bar2()){
// do something
}
我无法找到模仿此行为的方法。我试图在接口类中包装全局函数“foo()”并使用全局模拟对象来访问它,但是当调用TearDown()时我得到内存泄漏。也许我做得不好。我是这样做的:
struct IFoo {
virtual A* foo() = 0;
virtual ~IFoo() {}
};
struct FooMock : public IFoo {
FooMock() {}
virtual ~FooMock() {}
MOCK_METHOD0(foo, A*());
};
FooMock fooMock; // global mock object
// foo() implementation
A* foo() {
return fooMock.foo();
}
在SetUp()函数中,我在全局对象上设置了Expectations,如
EXPECT_CALL(fooMock,foo())
.Times(1)
.WillOnce(Return(&mockObj));
其中mockObj在Test类中声明。 TEST(...,instA){
// ...
}
我无法更改原始资料,我们还有其他选择吗?