blob: 4df690dd6d8fed3a093068d1c1e0d6f01be7c2eb [file] [log] [blame] [view]
# Library restrictions
## third_party/abseil-cpp
Decision: **do not use** `absl` in new code. Generally, `absl` is a
poor fit for use cases in Fuchsia. We will remove `absl` from the tree
once existing clients of it are migrated away. This removal work is tracked in
[https://fxbug.dev/42137495](https://fxbug.dev/42137495).
## third_party/googletest
Note: The googletest library includes both the former gtest and gmock
projects.
### Gtest
Use the Gtest framework for writing tests everywhere except the Zircon
directory. It provides the `TEST` and `TEST_F` macros as well as the `ASSERT`
and `EXPECT` variants we use.
Inside the Zircon directory, use `system/ulib/zxtest` instead. It provides a
Gtest-like interface with fewer dependencies on higher-level OS concepts like
mutexes (things we want to test). It also supports writing tests in
C which is required for some layers.
### Gmock
Gmock has several components. We allow the gmock matchers such as
`ElementsAre()`.
There are varying opinions on the team on the function mocking functions
(`MOCK_METHOD` and `EXPECT_CALL`).
Pros:
* It can be very efficient to do certain types of mocking.
* Some people feel that Gmock-generated mocks are easier to read than the
equivalent custom code.
* Lack of a mocking library means some people might not write good tests.
Cons:
* Gmock provides a domain-specific language. Not everybody understands this
language, and the complex use of templates and macros make it hard to
diagnose problems.
* Some aspects of Gmock encourage overly constrained mocks.
* Combinations of the above can make it harder to make changes to mocked
code later.
Decision: **do not use** the mocking functionality of gmock (`MOCK_METHOD` and
`EXPECT_CALL`).