c++ - 当传递 gmock 对象作为参考时,设置期望不匹配
问题描述
我想测试下一个类的行为。
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 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"));
您不期望rlogon
使用 string调用 of "ABC"
,但期望使用您无法控制的某些指针值进行调用。原因是你的论点类型是const char *
要修复它,请使用StrEq()
匹配器。
EXPECT_CALL(mock, rlogon(StrEq("ABC")));
推荐阅读
- r - 通过变量的唯一组合将变量添加到分组数据
- typescript - 黄瓜的纽约运行时覆盖率
- javascript - 发送多张图片但只显示一张
- excel - VBA 中 Microsoft Office 实例之间的通信
- python-3.x - 如何在pytorch中升级图像?
- r - 使用 ifelse 安装包
- android - NavigationDrawer 菜单中的 ScrollView
- .net - StackExchange Redis AddOrUpdate 处理(乐观并发)
- cmake - 在模板文件中扩展变量、#cmakedefine 和生成器表达式
- node.js - 多对多模型 A 未使用 Sequelize 关联到模型 B