Chromium 这样庞大的工程,涉及超多的模块依赖,如何保证代码质量?源码中随处可见 xxx_unittest.cc 和 xxx_fuzzer.cc 这样的文件,它们是如何组织的呢?项目的每一个 Commit 需要执行哪些测试,流程是什么?Chromium 做了哪些基础的工作支持繁琐又重要的测试工作,我们是否可以借鉴用到自己的项目中?
带着这些问题,开始阅读源码~ 先看一下 src 目录下有个 testing 的文件夹,里面存放了测试相关的基础代码和脚本:
Chromium 工程做了哪些测试呢?这里列举一下我从源码看到的,可能不全面。
单元测试
项目中所有模块都有大量的单元测试,命名规则为 xxx_unitest.cc, 每个模块的单元测试文件会放到一个 target 里编译, 比如下图就是 net 模块的单元测试 target。C/C++ 部分的单元测试是基于 gtest/gmock 这个框架的,可以看出来 Chromium 的 committer 花费了大量的时间保证大部分代码都是经过单元测试的。这个值得我们学习,我在 Chromium 跨平台基础库:多线程 中提到过,单元测试一方面保证代码质量,另一方面单元测试是很好的 code example,方便别人了解如何使用我们的代码。