我陷入了一个问题,似乎无法找到解决方案。
我正在使用 VS2005 SP1 来编译代码。
我有一个全局函数:
A* foo();
我有一个模拟课
class MockA : public A {
public:
MOCK_METHOD0 (bar, bool());
...
};
在源代码中,它的访问方式如下: foo()->bar()
。我找不到模拟这种行为的方法。而且我无法更改来源,因此 google mock cook book 中的解决方案是毫无疑问的。
任何正确方向的帮助或指示将不胜感激。 :)
原文由 Muhammad Hassan 发布,翻译遵循 CC BY-SA 4.0 许可协议
不,这是不可能的,不改变源代码,或者带上你自己的与可执行代码链接的
foo()
版本。从 GoogleMock 的常见问题解答 中说
也来自 食谱
public: … virtual bool Open(const char* path, const char* mode) { return OpenFile(path, mode); } };
struct IFoo { virtual A* foo() = 0; virtual ~IFoo() {} };
struct FooMock : public IFoo { FooMock() {} virtual ~FooMock() {} MOCK_METHOD0(foo, A*()); };
FooMock fooMock;
// Your foo() implementation A* foo() { return fooMock.foo(); }
TEST(…) { EXPECT_CALL(fooMock,foo()) .Times(1) .WillOnceReturn(new MockA()); // … }
”`
不要忘记在每个测试用例运行后清除所有调用期望。