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