我正在尝试模拟需要对象引用的函数。
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));
然后运行。但是此类的函数签名实际上需要引用。
阅读gmock的好地方是cheat sheet。在那里,我们找到了Ref
匹配器的文档
Ref(variable):参数是对变量的引用。
期望必须在testing::Ref
的帮助下写出
using namespace testing;
EXPECT_CALL(*t, func1(Ref(rect)).
.WillOnce(Return(0));