ON_CALL不起作用,但EXPECT_CALL有效

时间:2016-12-11 09:48:53

标签: unit-testing googlemock

我有一个单元测试代码,我对函数foo进行了模拟。当我使用ON_CALL构造指定动作时,它不执行my_action但只执行foo。

ON_CALL(my_mock, foo(my_matcher()))
.WillByDefault(DoAll(my_action(), Return(0)));

但是当我做EXPECT_CALL时,它有效。在我的例子中,foo()只被调用一次。我试着看看它有什么不同。但谷歌搜索或搜索stackoverflow没有帮助。以下是有效的EXPECT_CALL:

EXPECT_CALL(my_mock, foo(my_matcher()))
.WillOnce(DoAll(my_action(), Return(0)));

我不明白给出相同的my_matcher和my_action会有什么不同。

1 个答案:

答案 0 :(得分:0)

ON_CALL提供了在满足期望时运行的默认操作。因此,除非ON_CALL中定义的期望得到满足,否则EXPECT_CALL中定义的操作不会触发。 ON_CALL的典型用例是在WillOnce中替换一堆相同的WillRepeatedly / EXPECT_CALL子句。要使代码段正常工作,需要看起来像这样:

ON_CALL(my_mock, foo(_))
  .WillByDefault(DoAll(my_action(), Return(0)));
EXPECT_CALL(my_mock, foo(my_matcher())).Times(1);
EXPECT_CALL(my_mock, foo(my_other_matcher())).Times(1);