我们有这个例子:
Class A{
public:
int Get();
}
在另一个档案中:
A a;
struct B{
int res = a.Get();
}
我需要Google Mock Get方法,但是,我还需要调用真正的方法。我尝试了#ifdef,它似乎工作。然后我决定在#ifdef部分模拟它,但它什么也没做。
#ifdef UNIT_TEST
MOCK_METHOD0(A,Get);
#else
int A::Get(){....}
#endif
我做错了什么?有没有更清洁的方法呢?拜托,任何帮助都会非常感激。
答案 0 :(得分:2)
1)头文件:
struct A
{
#ifdef UNIT_TEST
MOCK_METHOD0(Get, int());
#else
int Get();
#endif
};
2)源文件:
#ifndef UNIT_TEST
int A::Get()
{
// ...
}
#endif
答案 1 :(得分:1)
似乎Google Mock已经发生了很大变化。现在,您可以尝试食谱中描述的delegating to a real object。您可以继续设置和检查模拟的期望值,但调用也将由真实事件处理。
class MockA : public A
{
public:
MockA()
{
ON_CALL(*this, Get()).WillByDefault(Invoke(&real, &A::Get));
}
MOCK_METHOD0(Get, int());
private:
A real;
};
答案 2 :(得分:-1)
标题文件:
class A{
public:
int Get();
};
A a;
源文件:
int A::Get(){
....
}
struct B{
return res = a.Get();
};