📌 项目地址google/googletest | ⭐ 39,016 颗星 | 🔧 C++ | 📜 未标注

先说清楚这个仓库是什么

google/googletest,39016 个 star,C++ 项目。

很多人不知道的一个细节:这个仓库是两个项目合并的产物。GoogleTest 和 GoogleMock 原本是独立仓库,因为两者关系太紧密,官方干脆合到一起维护和发布。所以你拉这一个仓库,测试框架和 Mock 框架都有。

它的 CI 直接跑在 Google 内部系统上,这也侧面说明 Google 内部在大规模用它。工业级 C++ 项目里,它是绕不开的选项。

官方列的这些特性,哪些是真有用的

README 的 Features 部分我逐条过了一遍,按实用程度排个序:

自动测试发现。写完测试不用手动注册,框架自己扫描运行。对比手写 main() 加 assert,这是效率上最大的一步。

致命/非致命失败区分。断言失败后可以选择继续跑完当前测试,一次看到所有问题,而不是修一个跑一次。调试效率差别很大。

值参数化测试。同一份测试逻辑,喂不同输入跑多遍。测解析器、测边界条件时省掉大量复制粘贴。

类型参数化测试。同一份测试作用于不同数据类型。写 C++ 模板库的人会明白这个的价值——一份测试代码覆盖所有类型实例化。

Death tests(死亡测试)。验证代码以预期方式退出,专门测错误处理路径。比如函数前置条件不满足时应该 abort,这种断言能力在别的测试框架里很少见。

自定义断言和内置断言集。相等、不等、异常这些开箱即用,不够就自己定义。

运行选项。单跑某个测试、指定顺序、并行执行。

框架基于 xUnit 架构。写过 JUnit 或 pytest 的人,看一眼测试组织方式就能上手,概念完全对应。

升级前必须知道的一件事

1.18.0 起要求至少 C++17。 这是当前版本线,也是最容易踩的坑。项目还锁在 C++11/14 的话,直接升 1.18.x 编译不过。要么留在旧版本线,要么先把编译标准升上去。

另一个动向写在 “Coming Soon” 里:官方计划引入对 Abseil 的依赖。在意依赖树干净的项目现在就该关注——一旦落地,构建链会多一个 Google 基础库。这不是坏事,但要有预期。

怎么开始学

README 本身没放代码示例,直接给了学习路径,照着走:

  1. 入门看 GoogleTest Primer
  2. 完整文档在 GitHub Pages:https://google.github.io/googletest/,官方明确建议在 Pages 上看,别直接翻仓库里的文件
  3. 构建相关问题看仓库内的 googletest/README.md

我的判断

C++ 测试框架里,Catch2 单头文件、上手快,小项目够用。选 googletest 的理由更具体:Mock 能力内置不用拼装、类型参数化和死亡测试这类深度特性、工具链(CI、IDE、CMake/Bazel)对它的开箱支持。

项目在 C++17 及以上,没什么好犹豫的。还在旧标准,先查编译器版本,再决定升库还是升标准。

这篇文章对你有帮助吗?

发表回复