为什么GMock无法识别模拟类中虚拟方法的实现?

问题描述 投票:0回答:1

我使用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);
}
c++ mocking gmock
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.