gpt4 book ai didi

c++ - google mock - 即使函数有不同的参数,EXPECT_CALL 也会触发

转载 作者:行者123 更新时间:2023-11-30 03:31:20 24 4
gpt4 key购买 nike

我有 EXPECT_CALL(MockObj, func("abc")).Times(1) 并且 MockObj 是一个 NiceMock

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

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

oh look we call func("def") but the arguments do not match the EXPECT_CALL; nothing to see here

但它反而“提示”:

unknown file: Failure

Unexpected mock function call - taking default action specified at:

C:/work/unit_test.cpp:36:

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

Returns: 1

Google Mock tried the following 1 expectation, but it didn't match:

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

Expected arg #0: is equal to 84c8b96 pointing to "abc"

Actual: 84bf479 pointing to "def"

Expected: to be called once

Actual: called once - saturated and active

首先注意到,由于调用了MockObj.func("abc")

,所以期望仍然得到满足

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

很好。

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

throw an error if the function matches existing EXPECT_CALL but not the arguments

最佳答案

您的问题“但是为什么 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());//意思 - 不在乎
EXPECT_CALL(MockObj, func("abc"));//TImes(1) 是默认的——你可以跳过它

关于c++ - google mock - 即使函数有不同的参数,EXPECT_CALL 也会触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44265713/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com