【问题标题】:google mock - EXPECT_CALL triggers even though function has different argumentgoogle mock - 即使函数有不同的参数,EXPECT_CALL 也会触发
【发布时间】:2017-05-30 15:00:44
【问题描述】:

我有EXPECT_CALL(MockObj, func("abc")).Times(1)MockObjNiceMock

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

我希望 Google Mock 说的合理的做法是

哦,看我们调用func("def"),但参数不匹配 EXPECT_CALL;这里没什么可看的

但它反而“抱怨”:

未知文件:失败

意外的模拟函数调用 - 采取在以下指定的默认操作:

C:/work/unit_test.cpp:36:

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

      Returns: 1

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

unit_test.cpp:50: EXPECT_CALL(MockObj, func("abc"))...

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

实际:84bf479 指向“def”

预期:被调用一次

实际:调用一次 - 饱和并激活

首先注意到期望仍然满足,因为调用了MockObj.func("abc")

我明白为什么 GMock 会抛出错误:我在 func 上声明了一个期望,所以它试图将对 func 的调用与期望相匹配,但它与参数不匹配,所以 错误

很好。

但为什么 GMock 会抛出 错误?由于参数不匹配,为什么选择此行为,即

如果函数匹配现有的EXPECT_CALL 但不匹配参数,则抛出错误

【问题讨论】:

    标签: c++ unit-testing googletest googlemock


    【解决方案1】:

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

    AFAIU googlemock - 您的案例中的 googlemock 以这种方式工作:

    1. EXPECT_CALL(MockObj, func("abc")); - 表示:“我对我的测试中的 Obj::func 感兴趣”
    2. MockObjNiceMock 意味着:“我不关心 Obj 的任何其他不是 EXPECT_CALL 的明确主题的函数”

    所以 - 如果您的被测代码调用 func("def") - 那么 google-mock 会这样做:

    1. 我们对func 感兴趣 - 让我们检查一下
    2. 我们不期望“def” - 所以测试失败

    也许你知道你应该这样做:

    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

    【讨论】:

      猜你喜欢
      • 2016-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-22
      • 1970-01-01
      • 2018-08-30
      • 1970-01-01
      • 2021-05-03
      相关资源
      最近更新 更多