【问题标题】:Googletest (gtest) / googlemock (gmock): Why is "interleav[ing] `EXPECT_CALL()`s and calls to the mock functions" undefined behavior?Googletest (gtest) / googlemock (gmock):为什么“interleav[ing] `EXPECT_CALL()`s and calls to the mock functions”未定义行为?
【发布时间】:2020-08-15 01:55:50
【问题描述】:

尽管写作

...我仍然不知道为什么 Google 说这是未定义的行为:

...否则行为未定义。特别是,您不能将 EXPECT_CALL() 和对模拟函数的调用交错”(https://github.com/google/googletest/blob/master/googlemock/docs/for_dummies.md#using-mocks-in-tests)

他们只是掩盖了我上面的问题,重申它实际上是未定义的行为,但没有解释原因。

谁能解释为什么以及如何是未定义行为的详细信息?

【问题讨论】:

    标签: c++ googletest undefined-behavior googlemock


    【解决方案1】:

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

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

    所有 UB 在这里的意思基本上是“不要依赖这个工作”。如果是这样,那就算你自己幸运,但不要指望它在其他任何变化时继续工作。

    所以本质上:

    我仍然不知道为什么 Google 说这是未定义的行为

    他们不必推动这个决定,因为这只是 API 设计的一部分。

    现在,如果问题是“为什么 Google 选择做出这种未定义的行为?”那就是另外一回事了。

    这样的框架下,答案也可能是:“提供保证这将在每个使用场景中都有效是太多的努力而没有足够的收益,所以我们不会承诺”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-30
      • 1970-01-01
      • 2022-12-02
      • 2022-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多