繁体   English   中英

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

[英]How to Google Mock a method called from a struct

让我们来看这个例子:

    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

我究竟做错了什么? 有没有更清洁的方法? 请,任何帮助将不胜感激。

你做错了 这是应该怎么做的:

1)头文件:

    struct A
    {
   #ifdef UNIT_TEST
       MOCK_METHOD0(Get, int());
   #else
       int Get();
   #endif
    };

2)源文件:

#ifndef UNIT_TEST
int A::Get()
{
  // ...
}
#endif

Google Mock似乎已经发生了很大变化。 现在,您可以尝试委派给食谱中所述的真实对象 您可以继续设置并检查模拟对象的期望值,但是调用也将由真实对象处理。

class MockA : public A
{
public:
    MockA()
    {
        ON_CALL(*this, Get()).WillByDefault(Invoke(&real, &A::Get));
    }
    MOCK_METHOD0(Get, int());

private:
    A real;
};

头文件:

class A{
     public:
       int Get();
};
A a;

源文件:

int A::Get(){
   ....
}

struct B{
    return res = a.Get();
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM