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

问题描述 投票:0回答:1

我是Google Mock的新手,正在试着用这段代码,我也检查了这个链接。

实际的函数调用次数与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, get())不匹配......

实际函数调用次数与EXPECT_CALL(obj, set(2, "hello"))不一致...

所以请大家帮忙,如果有新手教程请参考。

c++ mocking googletest googlemock
1个回答
5
投票

你的期望是说,当 obj 被销毁,你希望这个函数被调用过一次。你得到的是失败,因为这个函数实际上没有被调用。

TEST(Base, case1)
{
    MockBase obj;
    EXPECT_CALL(obj, get()).WillOnce(::testing::Return());
    obj.get();
}

会导致这个案例通过。显然这不是很有用,通常你会将mock注入到被测对象中。另外注意,这种情况下的操作是不必要的,下面的操作就可以了。

TEST(Base, case1)
{
    MockBase obj;
    EXPECT_CALL(obj, get());
    obj.get();
} 

Google有一些很好的参考资料。

https:/github.comgooglegoogletestblobmastergooglemockdocsfor_dummies.md。

https:/github.comgooglegoogletestblobmastergooglemockdocscheat_sheet.md。

https:/github.comgooglegoogletestblobmastergooglemockdocscook_book.md。

© www.soinside.com 2019 - 2024. All rights reserved.