Googletest(gtest)googlemock(gmock).为什么 "interleav[ing]`EXPECT_CALL()`s和对模拟函数的调用 "未定义行为?为什么 "interleav[ing]`EXPECT_CALL()`s和调用mock函数 "是未定义的行为?

问题描述 投票:0回答:1

尽管写了

...我还是不知道为什么Google说这是未定义的行为。

...否则这个行为就是未定义的。特别是,你不能把EXPECT_CALL()和对模拟函数的调用混在一起"(https:/github.comgooglegoogletestblobmastergooglemockdocsfor_dummies.md#using-mocks-in-tests。)

他们只是简单地掩盖了我上面的问题,重申其实是未定义的行为,但没有解释为什么。

有谁能解释一下为什么是未定义的行为以及如何定义的细节?

c++ googletest undefined-behavior googlemock
1个回答
0
投票

一般来说,未定义行为(UB)并不意味着它不能工作。它意味着不能保证它能工作。

另一种说法是,它更像是库作者和用户之间的合同,而不是对库的描述。

UB在这里的意思基本上就是 "不要依赖这个工作"。如果它确实有效,那就算你运气好,但不要指望它在其他东西改变时还能继续工作。

所以从本质上说。

我还是不明白为什么谷歌说这是未定义的行为?

他们不需要激励这个决定,因为这只是API设计的一部分。

现在,如果问题是 "为什么谷歌选择做出这种未定义的行为?" 那就另当别论了。

这样的框架下,答案可能也是。"保证在任何使用场景下都能正常工作" "这太费劲了,没有足够的收益,所以我们不会承诺"

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.