如何模拟将对象引用作为参数的函数-Google测试

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

我正在尝试模拟需要对象引用的函数。

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行:错误:“矩形== const矩形”操作是非法的。

不知道发生了什么。尽管如果我用指针替换了引用,它也可以工作。就像我这样做

MOCK_METHOD1(func1, int(Rectangle*));

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

然后运行。但是此类的函数签名实际上需要引用。

c++ googletest googlemock
1个回答
0
投票

阅读gmock的好地方是cheat sheet。在那里,我们找到了Ref匹配器的文档

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

期望必须在testing::Ref的帮助下写出

using namespace testing;

EXPECT_CALL(*t, func1(Ref(rect)).
        .WillOnce(Return(0)); 
© www.soinside.com 2019 - 2024. All rights reserved.