C++ 如何模拟以对象引用为参数的函数-google测试

C++ 如何模拟以对象引用为参数的函数-google测试,c++,googletest,googlemock,C++,Googletest,Googlemock,我试图模拟一个接受对象引用的函数 class AMock :public A { public: MOCK_METHOD1(func1, int(Rectangle&));// func1 is a function of class A AMock(int i):A(i) { } }; class MockService : public ::testing::Test {

我试图模拟一个接受对象引用的函数

class AMock :public A     {   
    public:

        MOCK_METHOD1(func1, int(Rectangle&));// func1 is a function of class A

        AMock(int i):A(i)
        {   
        }    
};

class MockService : public ::testing::Test
{   
    public:
        AMock* t;
        void SetUp()
        {
            t = new AMock(5);
         }
};

TEST_F(MockService, func1pass)
{
    using ::testing::Return;
    Rectangle rect;
    rect.set_values (3,4);
    EXPECT_CALL(*t, func1(rect).  //fails here with error
        .WillOnce(Return(0));
    ...//more code
}
错误-gmock/gmock matchers.h”,第1022行:错误:操作“Rectangle==const Rectangle”是非法的

不确定发生了什么。虽然如果我用指针替换引用,它会工作。就像我这样做一样

MOCK_METHOD1(func1, int(Rectangle*));


然后它就可以工作了。但是这个类的函数签名实际上需要一个引用。

一个阅读gmock的好地方是。在那里我们可以找到
Ref
匹配器的文档

class AMock :public A     {   
    public:

        MOCK_METHOD1(func1, int(Rectangle&));// func1 is a function of class A

        AMock(int i):A(i)
        {   
        }    
};

class MockService : public ::testing::Test
{   
    public:
        AMock* t;
        void SetUp()
        {
            t = new AMock(5);
         }
};

TEST_F(MockService, func1pass)
{
    using ::testing::Return;
    Rectangle rect;
    rect.set_values (3,4);
    EXPECT_CALL(*t, func1(rect).  //fails here with error
        .WillOnce(Return(0));
    ...//more code
}
Ref(variable):参数是对变量的引用

必须借助
testing::Ref

using namespace testing;

EXPECT_CALL(*t, func1(Ref(rect)).
        .WillOnce(Return(0)); 

阅读gmock的一个好地方是。在那里我们可以找到
Ref
matcher的文档

Ref(variable):参数是对变量的引用

必须借助
testing::Ref

using namespace testing;

EXPECT_CALL(*t, func1(Ref(rect)).
        .WillOnce(Return(0));