库限制

third_party/abseil-cpp

决定:请勿在新代码中使用 absl 。通常,absl 不太适合 Fuchsia 的用例。一旦现有的客户端迁移完毕,将从树中删除 absl。在 fxbug.dev/59428 处跟踪此删除工作。

third_party/googletest

注意:googletest 库包括以前的 gtest 和 gmock 项目。

Gtest

使用 Gtest 框架在除 Zircon 目录之外的任何地方编写测试。它提供了 TESTTEST_F 宏以及 ASSERTEXPECT 变量。

在 Zircon 目录中,改用 system/ulib/zxtest。它提供了一个类似 Gtest 的接口,减少了对诸如互斥锁(想要测试的东西)等高级操作系统概念的依赖。它还支持用 C 编写测试,这是某些层所必需的。

Gmock

Gmock 有一些组件。允许使用 gmock 匹配器,例如 ElementsAre()

关于函数 mocking 功能(MOCK_METHODEXPECT_CALL),团队有不同的看法。

赞成:

  • 进行某些类型的 mocking 可能非常有效。
  • 有些人认为 Gmock 生成的 mock 比等效的自定义代码更容易阅读。
  • 缺少 mocking 库意味着有些人可能写不出好的测试。

反对:

  • Gmock 提供了特定于域的语言。 并非每个人都懂这种语言,并且模板和宏的复杂使用使诊断问题变得困难。
  • Gmock 的某些方面鼓励过度限制 mock。
  • 上面的组合可能使以后更难对 mock 代码进行更改。

决定:请勿使用 gmock 的 mocking 功能(MOCK_METHODEXPECT_CALL)。