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));

kPolicystd::string

request_typeeType

request_subtypestd::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 无关。