gmock解决不支持右值引用的问题

来源:互联网 发布:知乎 陈寅恪 成就 编辑:程序博客网 时间:2024/05/29 12:41

因为gmock不支持C++11的右值引用,所以当如下测例出现时,会出现问题,导致连编译都通过不了:

#include <string>#include <gtest/gtest.h>#include <gmock/gmock.h>class A{public:    virtual void foo(std::string&&)=0;};class Mock_A: public A{public:    MOCK_METHOD1(foo,void(std::string&&));};TEST(RvalueRef, foo){    Mock_A r;    {        ::testing::InSequence sequence;        EXPECT_CALL(r,foo("hello"));    }    r.foo("hello");}int main(int argc, char* argv[]){    ::testing::InitGoogleMock(&argc,argv);    return RUN_ALL_TESTS();}

而解决办法是,利用一个中间函数,巧妙地跳过右值引用的部分:

#include <string>#include <gtest/gtest.h>#include <gmock/gmock.h>class A{public:    virtual void foo(std::string&&)=0;};class Mock_A: public A{public:    void foo(std::string&& s){foo_rvr(s);}    MOCK_METHOD1(foo_rvr, void(std::string));};TEST(RvalueRef, foo){    Mock—_A r;    {        ::testing::InSequence sequence;        EXPECT_CALL(r,foo_rvr("hi"));    }    std::string hello("hello");    r.foo("hi");    }int main(int argc, char* argv[]){    ::testing::InitGoogleMock(&argc,argv);    return RUN_ALL_TESTS();}

借此巧妙地化解gmock不能支持右值引用的问题。

原创粉丝点击