GMock调用错误的模拟函数

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

我有两个纯虚拟函数。

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类中进行模拟,就像这样。

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的mock。

我听说如果GMock的名称和签名相同,可能会 "混淆 "函数,而我的情况并非如此,因为函数名称不同。

这是不是一个常见的bug,有什么解决办法吗?

c++ googletest gmock
1个回答
0
投票

所以在我的例子中,是mock类的基类中的另一个虚拟方法被声明为ifdef,类似于这样。

#ifdef SOME_VARIABLE
    virtual void func() = 0;
#endif

导致了vtable中的函数偏移, 在 "SOME_VARIABLE "没有被定义的情况下.

所以这和GMOCK或GTEST无关。

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