库限制

third_party/abseil-cpp

决定:不要在新代码中使用 absl。通常,absl 不适合 Fuchsia 中的用例。absl 的现有客户端迁移完成后,我们将从该树中移除 absl。您可以在 https://fxbug.dev/42137495 中跟踪这项移除工作。

third_party/googletest

Gtest

使用 Gtest 框架可以在除 Zircon 目录之外的任何位置编写测试。它提供了 TESTTEST_F 宏,以及我们使用的 ASSERTEXPECT 变体。

在 Zircon 目录内,改用 system/ulib/zxtest。它提供了一个类似于 Gtest 的接口,减少了对互斥体(我们想要测试的内容)等更高级别操作系统概念的依赖。此外,它还支持用 C 语言编写测试,这是某些层所必需的。

Gmock

Gmock 包含几个组件。我们允许使用 ElementsAre() 等 gmock 匹配器。

团队对函数模拟函数(MOCK_METHODEXPECT_CALL)持有不同的意见。

优点:

  • 执行某些类型的模拟可能非常有效。
  • 有些人觉得 Gmock 生成的模拟代码比等效的自定义代码更易于阅读。
  • 缺少模拟库意味着某些人可能无法编写良好的测试。

缺点:

  • Gmock 提供网域特定语言。并非所有人都理解这种语言,模板和宏的复杂使用会导致难以诊断问题。
  • Gmock 的某些方面鼓励进行过度约束的模拟。
  • 结合使用上述各项可能会导致以后更难更改模拟代码。

决定:不要使用 gmock 的模拟功能(MOCK_METHODEXPECT_CALL)。