【发布时间】:2021-04-29 19:55:31
【问题描述】:
我想测试下一个类的行为。
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
【问题讨论】:
-
被模拟的方法必须是
virtual,在this documentation中没有任何东西表明它们是virtual。要么使用虚拟方法将其全部包装在您自己的包装类中,要么阅读有关在 GoogleMock cookbook 中模拟非虚拟方法的章节
标签: c++ unit-testing googletest gmock otl