मेरे पास दो शुद्ध वर्चुअल फ़ंक्शन हैं:

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_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 फ़ंक्शन को 'भ्रमित' कर सकता है यदि उसका एक ही नाम और सामान्य हस्ताक्षर है, जो वास्तव में मेरा मामला नहीं है, विभिन्न कार्यों के नामों के कारण।

क्या यह एक सामान्य बग है, और क्या कोई समाधान है?

0
Vanya Ryanichev 16 अप्रैल 2020, 11:11

1 उत्तर

सबसे बढ़िया उत्तर

तो मेरे मामले में यह नकली वर्ग के आधार वर्ग में एक और आभासी विधि थी जिसे ifdef के साथ घोषित किया गया था, ऐसा कुछ:

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

जो 'SOME_VARIABLE' परिभाषित नहीं होने की स्थिति में, vtable में फ़ंक्शन ऑफ़सेट का कारण बन रहा था।

तो यह GMOCK या GTEST करने के लिए कुछ नहीं है।

0
Vanya Ryanichev 27 अप्रैल 2020, 14:53