Почему реализация виртуального метода в фиктивном классе не распознается GMock? - PullRequest
0 голосов
/ 30 октября 2019

У меня довольно простая настройка для использования GMock (1.10.0). Я пытаюсь смоделировать экземпляр Generic, который является переменной-членом класса с именем Observation. Мне просто нужно проверить, что метод Generic calc_gravity () вызывается ровно один раз. Любая подсказка будет весьма цениться. (Пожалуйста, игнорируйте утечку.)

Я получаю это сообщение об ошибке:

нет соответствующей функции для вызова 'MockGeneric :: gmock_calc_gravity (const testing :: internal :: AnythingMatcher &)'

class Generic {

    public:

    virtual float calc_gravity(float x, float y) { return 9.81;} // Keep it simple.

    virtual ~Generic() {}

};


class MockGeneric :public Generic {

   public:

   MOCK_METHOD(float, calc_gravity, (float, float));

};


class Observation {

    private:
    Generic* generic;

    public:

    Observation(Generic* genericPtr) : generic(genericPtr) {};

    virtual void PositionConvert(float a, float b, float c) { cout << 5.0 + generic->calc_gravity();}

    virtual ~Observation() {};

};



 TEST(PositionConverter_Test, AMethodFromGenericInvokedOneTime) {

 MockGeneric* mockGenericPtr = new MockGeneric();
 using ::testing::_;
 EXPECT_CALL(*mockGenericPtr, calc_gravity(_)).Times(1);
 Observation o(mockGenericPtr);
 o.PositionConvert(2.5, 2.5, 2.5);
}

1 Ответ

1 голос
/ 30 октября 2019

MOCK_METHOD (float, calc_gravity, (float, float));

Вы должны заменить строку выше на:

MOCK_METHOD2(calc_gravity, float(float, float));

Есть другие ошибки вВаш код:

generic-> calc_gravity ()... EXPECT_CALL (* mockGenericPtr, calc_gravity (_)). Times (1);

calc_gravity принимает два аргумента.

...