如何匹配google mock

时间:2017-05-29 20:30:25

标签: c++ gmock

我正在尝试编写一个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()来检查传递的引用参数?

0 个答案:

没有答案