C++ googlemock-EXPECT_调用触发器,即使函数有不同的参数

C++ googlemock-EXPECT_调用触发器,即使函数有不同的参数,c++,unit-testing,googletest,googlemock,C++,Unit Testing,Googletest,Googlemock,我有一个EXPECT\u调用(MockObj,func(“abc”))。Times(1)和MockObj是一个NiceMock 在我测试的函数中,除了MockObj.func(“abc”)之外,还有一个调用MockObj.func(“def”) 我认为谷歌Mock说的话是合理的 哦,看,我们调用func(“def”),但是参数与 EXPECT_CALL;这里没什么可看的 但它却“抱怨”: 未知文件:失败 意外的模拟函数调用-执行以下位置指定的默认操作: C:/work/unit_test.cpp

我有一个
EXPECT\u调用(MockObj,func(“abc”))。Times(1)
MockObj
是一个
NiceMock

在我测试的函数中,除了
MockObj.func(“abc”)
之外,还有一个调用
MockObj.func(“def”)

我认为谷歌Mock说的话是合理的

哦,看,我们调用
func(“def”)
,但是参数与
EXPECT_CALL
;这里没什么可看的

但它却“抱怨”:

未知文件:失败

意外的模拟函数调用-执行以下位置指定的默认操作:

C:/work/unit_test.cpp:36:

Function call: func(84bf3d9 pointing to "def")

      Returns: 1
Google Mock尝试了以下1个期望值,但不匹配:

单元测试.cpp:50:期望调用(MockObj,func(“abc”))

预期arg#0:等于指向“abc”的84c8b96

实际值:84bf479指向“def”

期望:被呼叫一次

实际:称为一次饱和和活跃

首先请注意,由于调用了
MockObj.func(“abc”)
,所以仍然满足了期望

我理解GMock抛出错误的原因:我在
func
上声明了一个expection,因此它试图将对
func
的调用与预期匹配,但与参数不匹配,因此error

好的

但是为什么GMock会抛出一个错误?既然参数不匹配,为什么选择此行为,即

如果函数与现有的
EXPECT\u调用
匹配,但与参数不匹配,则抛出错误


对于您的问题“为什么GMock会抛出错误?”的直接答案是:因为它就是这样设计的

AFAIU googlemock-在您的案例中,googlemock的工作方式如下:

  • EXPECT_调用(MockObj,func(“abc”)
    -表示:“我对测试中的
    Obj::func
    感兴趣”
  • MockObj
    being
    NiceMock
    的意思是:“我不关心
    Obj
    的任何其他函数,它们不是EXPECT\u调用的明确主题。”
  • 因此,如果您的测试代码调用了
    func(“def”)
    ,那么google mock会这样做:

  • 我们对
    func
    感兴趣-那么让我们检查一下
  • 我们不期望“def”-因此测试失败
  • 也许你知道你应该这样做:

    
    EXPECT_CALL(MockObj,func(StrNe(“abc”)).Times(AnyNumber());//意思-不在乎
    期望调用(MockObj,func(“abc”);//默认时间(1)-您可以跳过它