Google Mock实际函数调用计数与EXPECT_CALL不匹配

时间:2013-05-13 12:39:09

标签: c++ mocking googletest googlemock

我是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”))不匹配...

所以请帮忙,如果有新手的任何教程请参考。

1 个答案:

答案 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

http://code.google.com/p/googlemock/wiki/CheatSheet

http://code.google.com/p/googlemock/wiki/CookBook