如何确保 EXPECT_CALL 的匹配器在参数不匹配时不会增加断言的计数器?

How to make sure matcher of EXPECT_CALL doesn't increment the counter of the assertion when argument doesn't match?

我正在根据模拟侦听器接收到的事件类型来匹配它的结果。我要定义的期望是 "you should receive such type of event once and assert the following once. Any other event doesn't matter to me".

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

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

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

这太烦人了,我就是找不到解决办法。
不用说 VerifyAndClear 在这里无济于事,因为这两个事件在一次调用中发生,我不打算将其分离,这对我的模型毫无意义。

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

应该能帮到你。