我有EXPECT_CALL(MockObj, func("abc")).Times(1)
而MockObj
是NiceMock
在我的测试中,除 MockObj.func("def")
外,还有一个电话MockObj.func("abc")
。
我希望合理的做法是让Google Mock说出
哦,看,我们称之为func("def")
,但参数不符合EXPECT_CALL
;这里没什么可看的
但相反它"抱怨":
未知文件:失败
意外的模拟函数调用 - 采取以下指定的默认操作:
C:/work/unit_test.cpp:36:
Function call: func(84bf3d9 pointing to "def") Returns: 1
谷歌模拟尝试了以下1个期望,但它没有匹配:
unit_test.cpp:50:EXPECT_CALL(MockObj,func(" abc"))...
预期arg#0:等于84c8b96指向" abc"
实际:84bf479指向" def"
预期:被召唤一次
实际:调用一次 - 饱和且活跃
首先注意到期望仍然满足,因为MockObj.func("abc")
被称为
我理解为什么GMock会抛出错误:我在func
上宣布了一次预测,所以它试图将对func
的调用与预期相匹配但是它与参数不匹配所以错误
精细。
但为什么GMock会抛出错误?由于参数不匹配,为什么选择此行为,即
如果函数匹配现有的EXPECT_CALL
而不是参数,则抛出错误
答案 0 :(得分:2)
直接回答你的问题“但为什么GMock会抛出错误?”是:因为它的设计是这样的。
AFAIU googlemock - 您案例中的googlemock以这种方式运作:
EXPECT_CALL(MockObj, func("abc"));
- 表示:“我对我的测试中的Obj::func
感兴趣”MockObj
NiceMock
表示:“我不关心Obj
的任何其他未明确的EXPECT_CALL主题的功能”所以 - 如果您的测试代码调用func("def")
- 那么google-mock会这样做:
func
感兴趣 - 所以让我们检查一下可能你知道你应该这样做:
EXPECT_CALL(MockObj, func(StrNe("abc"))).Times(AnyNumber()); // meaning - do not care
EXPECT_CALL(MockObj, func("abc")); // TImes(1) is default - you might skip it