【问题标题】:How to make sure matcher of EXPECT_CALL doesn't increment the counter of the assertion when argument doesn't match?当参数不匹配时,如何确保 EXPECT_CALL 的匹配器不会增加断言的计数器?
【发布时间】:2016-11-29 17:18:08
【问题描述】:

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

这是我目前写的断言

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

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

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

【问题讨论】:

    标签: unit-testing googletest assertions gmock


    【解决方案1】:
    {
      testing::InSequence s;
      EXPECT_CALL(listener, changed(Field(&Event::type, Event::Type::processed)).WillOnce(/*Blablabla*/);
      EXPECT_CALL(listener, changed(_)).Times(testing::AnyNumber());
    }
    

    应该为您解决问题。

    【讨论】:

    • 太棒了,谢谢!我感觉它也与序列有关,但最终这并不容易。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-14
    • 1970-01-01
    • 2017-12-31
    • 2012-06-17
    • 1970-01-01
    相关资源
    最近更新 更多