写点什么

Google 新的 C++ 测试框架发布啦

  • 2008-07-17
  • 本文字数:1385 字

    阅读完需:约 5 分钟

Google 最近开源了其基于 xUnit 的 C++ 单元测试框架。项目开发者 Zhanyong Wan 说在 Google 内部已经有数以千计的 C++ 开发者在使用该框架,并且已经持续好几年了。

根据 Google 所述,此次发布的主要亮点体现在:

  • Google Test 是便携式的:它可以通过不同版本的 GCC 和 MSVC 编译器应用在多种平台上(Linux、Windows、Mac OS X 等等)。你甚至可以将它用于 Windows CE 和 Symbian 这样的嵌入式系统中。很多平台的构建工具和测试运行器都处在开发当中,并且现在已经有 Linux 的 Autotools 支持了。
  • 支持 fatal 和 nonfatal 断言。在 nonfatal 失败后测试还会继续。这使得在一次单独的编辑——编译——测试周期中能发现并修复更多问题。
  • 对常见的测试需求提供很多断言,同时你也可以轻松地对不常见的情况定义新的断言
  • 在 Linux 上,你可以编写 death tests 以确保你的代码在遇到期望的错误时崩溃。
  • 因为该框架基于流行的 xUnit 架构,所以如果你以前使用过该家族中的任何一个测试框架,那么就很容易掌握它。

C++ 社区一直都觉得他们的单元测试工具不如 Java 和 C#等其他现代语言的好,很多人还会问:“为什么还要用另一个工具?它有什么特别的?”。在其 wiki 的 Faqs 中,Googlers 尝试去解答这些问题。他们说他们并没有宣称其工具要比现存的好,而仅仅是将对其工作有帮助的一些功能整合起来。从该站点上我们看到:

我们希望这个列表能帮助你判定 Google Test 是否对你也有帮助:

  • Google Test 被设计为便携式的。在很多 STL 类型(如 std::string 及 std::vector)无法编译的地方它都能正常执行。它无需异常或者 RTTI。所以,它能运行在 Linux、Mac OS X、Windows 及一些嵌入式操作系统上。
  • 事实证明 Nonfatal 断言(EXPECT_*)可以节省大量时间,因为他们使得在一次单独的编辑——编译——测试周期中能报告多个失败。
  • 编写可以生成信息的断言非常简单:就用流(stream)语法来附加任何额外的信息就行,如 ASSERT_EQ(5, Foo(i)) << " where i = " << i;。它不需要新的宏或者特殊的函数。
  • Google Test 自动检测你的测试,你如果想运行测试的话就无需列举他们。
  • 没有一个框架能预料到你所有的需求,因此 Google Test 提供了 EXPECT_PRED* 以方便地扩展你的断言词汇表。通过良好的语法,你可以使用 EXPECT_PRED* 来方便地定义你自己的断言宏。
  • Death tests 非常方便,它能确保恰当的情况可以触发你在产品中的断言。
  • 当断言失败是来自于内部的过程或者循环时,SCOPED_TRACE 有助于你了解断言失败的上下文。
  • 你可以使用命名模式来决定运行哪些测试。当你想快速重现某个失败时这会节省你大量时间。

Saptarshi Purkayastha 花了一些时间来调研该框架并在其博客上写了一些想法。他的反应是积极的。

该框架另一个让人称道的地方就是学习其基础与高级特性都是那么容易。它与 xUnit 非常像并且具备了可以与 CppUnit 抗衡的优势。你可以从这里学习基础,从这里学习高级特性。Predicate Assertions 可能是我最喜欢的特性之一了,当我们调试遇到麻烦时就可以在程序中使用该特性。还有很多其他的断言,我们还没有深入地研究他们。但是自从第一次看到该框架,我们很多人就将它作为最好的测试框架之一了…

根据 wiki 所述,你可以查看初级手册以尽快上手Google Test,然后请参考高级指南以了解更多内容。

可从这里下载该框架,尝试一下,然后告诉社区你的想法!

查看英文原文: Announcing: New Google C++ Testing Framework

2008-07-17 01:392322
用户头像

发布了 88 篇内容, 共 272.0 次阅读, 收获喜欢 9 次。

关注

评论

发布
暂无评论
发现更多内容

Redis的AOF方案(Redis持久化)

大数据技术指南

redis 4月日更

面试4轮字节Java研发岗,最终拿下2-1Offer(原题复盘)

Java架构追梦

Java 字节跳动 面试

阿里巴巴研究员吴翰清采访提纲:天才少年之路

Nydia

签约计划

fil云算力挖矿系统开发成功案例丨fil云算力挖矿源码设计

系统开发咨询1357O98O718

AUC/ROC:面试中80%都会问的知识点

华为云开发者联盟

机器学习 面试 mindspore roc AUC

Spring Cloud Gateway 和Webflux 请求参数非法字符处理

sN0wpeak

Java Spring Cloud SpringcloudGateway

apk优化,996页阿里Android面试真题解析火爆全网,附面试答案

欢喜学安卓

android 程序员 面试 移动开发

智慧平安社区建设--赋能基层治理

13530558032

python内置数据结构list、set、dict、tuple(二)

若尘

List 数据结构 set 元组 Python编程

库存溯源之批次管理

Geek_vidmje

溯源 供应链 仓储 冷链 wms

MySQL内置函数

Sakura

4月日更

IPFS挖矿系统开发详情案例丨IPFS挖矿矿机源码平台

系统开发咨询1357O98O718

ORC格式和PARQUET格式介绍

五分钟学大数据

hive 存储 4月日更

LiteOS内核源码分析:消息队列Queue

华为云开发者联盟

队列 LiteOS LiteOS内核 消息队列Queue 队列池

区块链电子合同签约,推动合同签约数字化转型

13530558032

专访彩食鲜 CTO 乔新亮:CTO的“升级”秘笈

IT蜗壳-Tango

源中瑞区块链农产品溯源--推动农业科技发展

13530558032

FILPool云算力挖矿系统开发源码案例

系统开发咨询1357O98O718

工作三年,小胖连 HashMap 源码都没读过?真的菜!

一个优秀的废人

扩容 hashmap 源码剖析 HashMap底层原理 加载因子

万字长文,38 图爆肝 Redis 基础!

一个优秀的废人

redis 数据结构 集合 哈希表 跳表

《采访提纲:声网 Agora.io 资深 iOS 开发工程师--龚宇华》

空城机

签约计划 4月日更 热门活动

四两拨千斤——你不知道的VScode编码TypeScript的技巧

葡萄城技术团队

android面试题及答案,我的阿里春招之路分享,附面试答案

欢喜学安卓

android 程序员 面试 移动开发

浅谈BSS3.0产品“守成”之策中 • 业务提升篇

鲸品堂

系统架构 性能调优

美国工程院士、谷歌首席架构师 杰夫·迪恩(JeffDean) John 易筋 ARTS 打卡 Week 45

John(易筋)

ARTS 打卡计划

重读《重构2》- 以查询取代临时变量

顿晓

重构 4月日更

别再问我 2050 可以干什么,Make a Movie in a Day!

阿里云CloudImagine

电影

加密原理详解:对称式加密VS非对称式加密

vivo互联网技术

加密 rsa

Spark内存管理与调优

小舰

4月日更

快来,告诉你一个赚钱的秘诀:金钱的秘密

帅安技术

赚钱 秘密 金钱的秘密

华为云薛浩:走进视频“新时代”

华为云开发者联盟

云原生 视频 华为云 vr 图形处理

Google新的C++测试框架发布啦_Java_Mike Bria_InfoQ精选文章