调用模拟上的预期方法时调用方法
Posted
技术标签:
【中文标题】调用模拟上的预期方法时调用方法【英文标题】:Calling a method when expected method on mock was invoked 【发布时间】:2011-04-27 16:18:42 【问题描述】:我有以下场景:
类接口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()));?
我希望答案很清楚,例子也是。
提前致谢。 市场
【问题讨论】:
【参考方案1】: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 - 它提供了有关函数和方法调用操作的更多信息。
【讨论】:
非常感谢弗拉德。这就是我一直在寻找的。我读过 gmock 的 Cookbook,但 CheatSheet 更紧凑更好。再次感谢。以上是关于调用模拟上的预期方法时调用方法的主要内容,如果未能解决你的问题,请参考以下文章
在 vue-multiselect 中测试 vuex 操作时调用了 Jest 预期的模拟函数