我有一个单元测试代码,我对函数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会有什么不同。
答案 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);