Turtle Mock:如何忽略意外来电?
Posted
技术标签:
【中文标题】Turtle Mock:如何忽略意外来电?【英文标题】:Turtle Mock: How to ignore unexpected calls? 【发布时间】:2021-04-17 19:32:52 【问题描述】:是否可以忽略 Turtle Mock 的意外方法调用?在我的测试期间,模拟方法被多次调用。我想在每个测试中只检查一个带有特定参数的调用。现在我必须编写一个巨大的测试,我必须编写所有方法调用。
【问题讨论】:
你有一些代码要显示吗?通过对文档的粗略扫描,我猜您可以明确使用 MOCK_RESET/MOCK_VERIFY 获得免费通行证。如果你添加一个你被卡住的小例子,我们可以看看 【参考方案1】:The expectation selection algorithm 描述了如何设置多个调用:
然后通过按定义的顺序处理期望来处理每个方法调用:
寻找具有从左到右评估的有效参数约束的匹配项 检查此匹配项的调用计数是否已用完
所以如果你设置一个你期望的和一个通用的,比如
MOCK_EXPECT( v.display ).once().with( 0 );
MOCK_EXPECT( v.display );
它应该让其他电话安静下来,同时仍然确保你关心的电话会得到满足。
现在如果你想强制执行调用的顺序,例如确保你感兴趣的调用首先发生,你必须use a sequence,例如
mock::sequence s;
MOCK_EXPECT( v.display ).once().with( 0 ).in( s );
MOCK_EXPECT( v.display ).in( s );
【讨论】:
感谢您的提示。但似乎真的需要“一次”,否则这个测试是绿色的:class A public: virtual void f(int a) = 0; ; MOCK_BASE_CLASS(AMock, A) public: MOCK_METHOD(f, 1, void(int)) ; void test(A* a) a->f(5); a->f(66); a->f(7); BOOST_AUTO_TEST_CASE(***_SimpleTest) AMock aMock; MOCK_EXPECT(aMock.f).with(6); MOCK_EXPECT(aMock.f); test(&aMock);
啊,是的,好点,没有once()
,那么«no call»是有效的。我会更新我的答案。以上是关于Turtle Mock:如何忽略意外来电?的主要内容,如果未能解决你的问题,请参考以下文章