Как Google Mock метод, вызываемый из структуры - PullRequest
4 голосов
/ 07 мая 2011

Давайте рассмотрим этот пример:

    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 ]

2 голосов
/ 07 мая 2011

Вы сделали это неправильно. Вот как это должно быть сделано:

1) Заголовочный файл:

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

2) Исходный файл:

#ifndef UNIT_TEST
int A::Get()
{
  // ...
}
#endif
1 голос
/ 14 мая 2013

Кажется, что Google Mock изменился совсем немного. Теперь вы можете попробовать делегирование реальному объекту , описанному в кулинарной книге. Вы можете продолжить устанавливать и проверять ожидания на макете, но вызовы также будут обрабатываться реальными вещами.

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

private:
    A real;
};
0 голосов
/ 08 мая 2011

Заголовочный файл:

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

Исходный файл:

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

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