将模拟对象作为参考传递时,设置预期不匹配
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")));
我想测试以下 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;
创建了一个派生模拟 classclass 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")));