我是Google Mock的新手,正在尝试使用此代码,我也检查了这个链接。
Actual function call count doesn't match EXPECT_CALL(*mock, display())
但无法获得正确的输入。
Base.cc
class Base
{
int val;
string msg;
public:
Base():val(0), msg("world"){}
virtual ~Base(){}
virtual void set(int x, string msg)
{
this->val = val;
this->msg = msg;
}
virtual void get()
{
cout << "val :" << this->val << endl;
cout << "msg :" << this->msg << endl;
}
};
class MockBase : public Base
{
public:
MOCK_METHOD0(get, void());
MOCK_METHOD2(set, void(int val, string msg));
};
Base_unittest.cc
int main(int argc, char * argv[])
{
std::cout << "in main" << endl;
::testing::InitGoogleTest(&argc,argv);
return RUN_ALL_TESTS();
}
TEST(Base, case1)
{
MockBase obj;
EXPECT_CALL(obj, get()).WillOnce(::testing::Return());
}
TEST(Base, case2)
{
MockBase obj;
EXPECT_CALL(obj, set(2,"hello")).WillOnce(::testing::Return());
}
我收到错误:
实际函数调用计数与EXPECT_CALL(obj,get())...
不匹配实际函数调用次数与EXPECT_CALL(obj,set(2,“hello”))不匹配...
所以请帮忙,如果有新手的任何教程请参考。
答案 0 :(得分:5)
您的期望是说当obj
被销毁时,您希望该函数被调用一次。您正在收到失败,因为实际上没有调用该函数。
TEST(Base, case1)
{
MockBase obj;
EXPECT_CALL(obj, get()).WillOnce(::testing::Return());
obj.get();
}
会导致此案件通过。显然这不是很有用,通常你会将模拟注入到测试对象中。另请注意,在这种情况下的操作是不必要的,以下操作。
TEST(Base, case1)
{
MockBase obj;
EXPECT_CALL(obj, get());
obj.get();
}
Google有一些很好的参考资料:
http://code.google.com/p/googlemock/wiki/ForDummies