我正在尝试编写一个EXPECT_CALL()表达式来调用一个方法,该方法将对基类的引用作为参数。我作为参数传入的对象是从基类派生的类。
class AbstractBase {
public:
virtual ~Base() = default;
virtual void foo() = 0;
};
class Derived : public AbstractBase {
...
void init() {
func(*this);
}
};
我想要模拟的界面:
class Mockfoo : public foo {
public:
MOCK_METHOD1(func, void(AbstractBase& obj));
}
在测试中,我希望通过引用Derived对象来调用func:
TEST() {
Derived d;
MockFoo mock;
EXPECT_CALL(mock, func(d))
.Times(1);
d.init();
}
但这不起作用。 Gmock无法与Derived&与AbstractBase&amp ;. 这样做的正确方法是什么?我想确保传入的引用是对d对象的引用。 EXPECT_CALL()表达式应该如何?
编辑: 按照πάνταῥεῖ的说明,解决方案如下所示:
using ::testing::_;
using ::testing::SetArgReferee;
TEST() {
Derived d;
MockFoo mock;
EXPECT_CALL(mock, func(_))
.Times(1)
.WillOnce(SetArgReferee<0>(d));
d.init();
}
编辑2: 在测试中,我想设置传递给func的对象的期望是d实例。上面的WillOnce语句只设置参数,它不评估它,它不检查实际传递给func()方法的内容。 所以现在我的问题是:如何编写一个EXPECT_CALL()来检查传递的引用参数?