为什么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
接受两个参数。
我有一个非常简单的设置来使用 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
接受两个参数。