gpt4 book ai didi

mocking - 当调用模拟上的预期方法时调用方法

转载 作者:行者123 更新时间:2023-12-02 11:02:40 24 4
gpt4 key购买 nike

我有以下情况:

class InterfaceA;class InterfaceB;class InterfaceC;class InterfaceA{  virtual void foo(InterfaceC&) = 0;};class InterfaceB{  virtual void bar() = 0;};class InterfaceC{  virtual void bla() = 0;};// MOCKsclass MockA : public InterfaceA{  public:    MOCK_METHOD0(foo, void(InterfaceC&));};class MockB : public InterfaceB{  public:    MOCK_METHOD0(bar, void());};class ImplC : public InterfaceC{  public:    ImplC(InterfaceA& a, Interface& b) : m_a(a), m_b(b) {}    void doSomething() {      m_a.foo(*this);    }    virtual void bla()    {      m_b.bar();    }};
MockA mockA;MockB mockB;EXPECT_CALL(mockA, foo());ImplC impl(mockA, mockB);impl.doSomething(); // will call foo on mockA

如果调用 doSomething,则会在 MockA 上调用 foo。如果 foo 被调用,如何触发 bla 方法的调用?是否有可能以某种方式创造这样的期望:

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

我希望答案和例子都很清楚。

提前致谢。市场

最佳答案

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 page - 它提供了有关函数和方法调用操作的更多信息。

关于mocking - 当调用模拟上的预期方法时调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5807302/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com