如果参数不匹配,如何确保EXPECT_CALL的匹配器不会递增断言的计数器?

时间:2016-11-29 17:18:08

标签: unit-testing googletest assertions gmock

我根据收到的事件类型匹配模拟侦听器的结果。我想要定义的期望是“你应该一次接收这种类型的事件并断言以下一次。任何其他事件对我来说都无关紧要。”

这是我到目前为止所写的断言

EXPECT_CALL(listener, changed(Field(&Event::type, Event::Type::processed)).WillOnce(/*Blablabla*/);

理论上我的听众应该接到两个电话。一个事件:: Type :: processed和一个Event :: Type :: done。我明确地不想“断言”关于后者的任何事情。 似乎Matcher将成功匹配Event :: Type :: processed,触发WillOnce ......但会在测试结束时告诉我我的期望Times(1)已经饱和,因为尽管它没有' t匹配第二个事件(Event :: Type :: processed)它仍然增加了这个期望的整体计数器......

这太烦人了,我无法找到解决办法 毋庸置疑,VerifyAndClear在这里不会有所帮助,因为这两个事件在一次调用中发生,我不打算将它解耦,这对我的模型来说毫无意义。

1 个答案:

答案 0 :(得分:0)

{
  testing::InSequence s;
  EXPECT_CALL(listener, changed(Field(&Event::type, Event::Type::processed)).WillOnce(/*Blablabla*/);
  EXPECT_CALL(listener, changed(_)).Times(testing::AnyNumber());
}

应该为你做的伎俩。