4

我有以下情况:

类接口A;
类接口B;
类接口C;


类接口A
{
  虚拟 void foo(InterfaceC&) = 0;
};

类接口B
{
  虚拟空条()= 0;
};

类接口C
{
  虚空 bla() = 0;
};

// 模拟

模拟类A:公共接口A
{
  上市:
    MOCK_METHOD0(foo, void(InterfaceC&));
};

MockB 类:公共接口 B
{
  上市:
    MOCK_METHOD0(bar, void());
};


类 ImplC:公共接口 C
{
  上市:
    ImplC(InterfaceA& a, Interface& b) : m_a(a), m_b(b) {}

    无效 doSomething() {
      m_a.foo(*this);
    }

    虚空 bla()
    {
      m_b.bar();
    }
};

模拟A模拟A;
模拟B模拟B;

EXPECT_CALL(mockA, foo());

ImplC impl(mockA, mockB);

impl.doSomething(); // 将在 mockA 上调用 foo

如果调用 doSomething,则将在 MockA 上调用 foo。如果将调用 foo,我如何触发方法 bla 的调用?是否有可能以某种方式产生如下期望:

EXPECT_CALL(mockA, foo()).WillOnce(Invoke(impl.bla()));

?

我希望答案很清楚,例子也很清楚。

提前致谢。市场

4

1 回答 1

12
EXPECT_CALL(mockA, foo()).WillOnce(InvokeWithoutArgs(&impl, &ImplC::bla));

应该管用。如果必须传递更复杂的参数,请使用 boost::bind (注意参数列表中类实例和方法的不同顺序):

EXPECT_CALL(mockA, foo())
    .WillOnce(Invoke(boost::bind(&ImplC::bla, &impl, other_params)));

如果foo()给出了一些应该传递给的参数bla(),请使用WithArgs

EXPECT_CALL(mockA, foo(Lt(1), _))
    .WillOnce(WithArgs<0>(Invoke(&impl, &ImplC::bla)));

另请查看 Google Mock Cheat Sheet wiki 页面- 它提供了有关函数和方法调用操作的更多信息。

于 2011-04-28T00:56:29.103 回答