写点什么

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:392363
用户头像

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

关注

评论

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

PostgreSQL:您可能需要增加MAX_LOCKS_PER_TRANSACTION

PostgreSQLChina

数据库 postgresql 开源

由于不知线程池的bug,某Java程序员叕被祭天

Java架构师迁哥

volatile,synchronized可见性,有序性,原子性代码证明(基础硬核)

叫练

volatile 多线程 synchronized 原子性 指令

“区块链+社会治理”模式获居民点赞

CECBC

区块链 区块链投票

大连市税务局局长赵福增:用区块链打破部门间“信息孤岛”

CECBC

区块链 汽车

LeetCode题解:55. 跳跃游戏,贪心,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

MSHA x Chaos 容灾高可用实践

阿里巴巴云原生

数据库 高可用 云原生 中间件 容灾

云服务的可服务性经典6问

华为云开发者联盟

服务 计算

英特尔宋继强:迈向可持续的千倍速计算未来

E科讯

App性能测试揭秘(Android篇)

移动研发平台EMAS

阿里云 软件测试 测试 性能测试 云性能测试

2020,谁是中国ToB行业最有影响力的企业?

ToB行业头条

编程之美!从线程池状态管理来看二进制操作之美

Geek Tech

Java 源码分析 线程池

OPPO小布助手正在改变普罗米修斯的世界

脑极体

阿里开发10年,全部心血汇聚成到这份文档里,拿到30W的offer没问题

Java架构之路

Java 程序员 架构 面试 编程语言

TypeScript | 第二章:类、接口和之间的关系

梁龙先森

typescript 大前端 七日更

比特币10年:从2个披萨涨到2万美金,背后的三个“神秘人”

CECBC

比特币

神比喻:低代码开发像自动驾驶汽车,零代码开发像无人驾驶汽车!

J2PaaS低代码平台

程序员 软件 开发者 低代码 开发工具

GitHub上3天1W赞的程序员学习路线!入门进阶都非常实用

Java架构之路

Java 程序员 架构 面试 编程语言

量化交易系统开发搭建案例

薇電13242772558

区块链 策略模式

软件测试(功能、接口、性能、自动化)详解

测试人生路

软件测试

倍频程与钢琴调式的距离

阿里云CloudImagine

音频技术 音频

架构师训练营W10作业

Geek_f06ede

测开之函数进阶· 第2篇《纯函数》

清菡软件测试

测试开发

【Java入门】流

Albert

Java 七日更

脑洞:如何用一个整数来表示一个列表?

Python猫

Python

大作业1

龙卷风

架构师一期

阿里架构师478页Java工程师面试知识解析笔记pdf,一份2021年通往阿里的面试指南

Java架构之路

Java 程序员 架构 面试 编程语言

学透这份300页的2020最新java面试题及答案,一线大厂offer随便拿

Java架构之路

Java 程序员 架构 面试 编程语言

大众汽车“芯片荒”,折射汽车芯片的漫漫“自主替代”路

脑极体

Reactive Spring实战 -- 理解Reactor的设计与实现

binecy

reactor Reactive SpringBoot 2

距离 Java 开发者玩转 Serverless,到底还有多远?

阿里巴巴云原生

Java Serverless 微服务 云原生 中间件

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