如何谷歌模拟从结构调用的方法

时间:2011-05-07 14:24:34

标签: c++ mocking googlemock

我们有这个例子:

    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

我做错了什么?有没有更清洁的方法呢?拜托,任何帮助都会非常感激。

3 个答案:

答案 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();
};