为什么GMock无法识别mock class中虚方法的实现?

Why is the implementation of the virtual method in the mock class not recognized by GMock?

我有一个非常简单的设置来使用 GMock (1.10.0)。我正在尝试模拟 Generic 的实例,它是 class 命名 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);
}

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 接受两个参数。