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));