将模拟对象作为参考传递时,设置预期不匹配

When passing gmock object as reference the setup expectations doesnt match

我想测试以下 class.

的行为
class DAO{
    otl_connect *conn;
    public:
        DAO(otl_connect* _conn){
            conn = _conn;
        }

        bool init(){
            bool ret = true;
            try{
                conn->rlogon("ABC");
            }catch(otl_exception &e){
                ret = false;
            }
            return ret;
        }
};

为此,我从 otl_connect;

创建了一个派生模拟 class
class MockOtlConnect : public otl_connect {
    public:
        MOCK_METHOD0(logoff, void());
        MOCK_METHOD1(rlogon, void(const char *connect_str));
};

在我的测试中,它创建了对函数调用的期望 rlogon

TEST(TesteMockOtlConnect, MockingOtlConnect){
    MockOtlConnect mock;
    EXPECT_CALL(mock, rlogon("ABC"));

    DAO dao(&mock);
    EXPECT_TRUE(dao.init();
}

但这种期望永远不会得到满足。

Actual function call count doesn't match EXPECT_CALL(mock, rlogon("ABC"))...
         Expected: to be called once
           Actual: never called - unsatisfied and active

问题是错误的匹配器。通过写作:

EXPECT_CALL(mock, rlogon("ABC"));

您不希望使用字符串 "ABC" 调用 rlogon,但您希望使用一些您无法控制的指针值进行调用。 原因是你的参数类型是 const char *

要修复它,请使用 StrEq() 匹配器。

EXPECT_CALL(mock, rlogon(StrEq("ABC")));