GMock 调用了错误的模拟函数
GMock calls wrong mocked function
我有两个纯虚函数:
virtual bool IsTypeAllowed(
const std::string& policy,
eType type) const = 0;
virtual bool IsSubTypeAllowed(
const std::string& policy,
const std::string& request) const = 0;
在 Mock class 中模拟,像这样:
MOCK_CONST_METHOD2(IsTypeAllowed,
bool(const std::string& policy,
eType type));
MOCK_CONST_METHOD2(IsSubTypeAllowed,
bool(const std::string& policy,
const std::string& request));
预期调用:
EXPECT_CALL(mock_policy_handler_,
IsTypeAllowed(kPolicy, request_type))
.WillOnce(Return(true));
EXPECT_CALL(mock_policy_handler_,
IsSubTypeAllowed(kPolicy, request_subtype))
.WillOnce(Return(false));
有
kPolicy
是 std::string
request_type
是 eType
request_subtype
是 std::string
然后就是调用IsTypeAllowed:
policy_handler.IsTypeAllowed(kPolicy,request_type)
它模拟 IsSubTypeAllowed。
我听说如果 GMock 具有相同的名称和共同的签名,它可能 'confuse' 起作用,但由于函数名称不同,我的情况并非如此。
这是一个常见的错误吗?有解决方案吗?
所以在我的例子中,它是 mock class 的基 class 中的另一个虚拟方法,用 ifdef 声明,类似于:
#ifdef SOME_VARIABLE
virtual void func() = 0;
#endif
这会导致 vtable 中的函数偏移,以防 'SOME_VARIABLE' 未定义。
因此与 GMOCK 或 GTEST 无关。
我有两个纯虚函数:
virtual bool IsTypeAllowed(
const std::string& policy,
eType type) const = 0;
virtual bool IsSubTypeAllowed(
const std::string& policy,
const std::string& request) const = 0;
在 Mock class 中模拟,像这样:
MOCK_CONST_METHOD2(IsTypeAllowed,
bool(const std::string& policy,
eType type));
MOCK_CONST_METHOD2(IsSubTypeAllowed,
bool(const std::string& policy,
const std::string& request));
预期调用:
EXPECT_CALL(mock_policy_handler_,
IsTypeAllowed(kPolicy, request_type))
.WillOnce(Return(true));
EXPECT_CALL(mock_policy_handler_,
IsSubTypeAllowed(kPolicy, request_subtype))
.WillOnce(Return(false));
有
kPolicy
是 std::string
request_type
是 eType
request_subtype
是 std::string
然后就是调用IsTypeAllowed:
policy_handler.IsTypeAllowed(kPolicy,request_type)
它模拟 IsSubTypeAllowed。
我听说如果 GMock 具有相同的名称和共同的签名,它可能 'confuse' 起作用,但由于函数名称不同,我的情况并非如此。
这是一个常见的错误吗?有解决方案吗?
所以在我的例子中,它是 mock class 的基 class 中的另一个虚拟方法,用 ifdef 声明,类似于:
#ifdef SOME_VARIABLE
virtual void func() = 0;
#endif
这会导致 vtable 中的函数偏移,以防 'SOME_VARIABLE' 未定义。
因此与 GMOCK 或 GTEST 无关。