AICon 上海站|日程100%上线,解锁Al未来! 了解详情
写点什么

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

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

关注

评论

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

go-zero如何追踪你的请求链路

万俊峰Kevin

Trace microservice Go 语言

【涂鸦物联网足迹】API及SDK介绍

IoT云工坊

软件开发 物联网 API sdk 云平台

会展云技术解读 | 面对突发事故,APP如何做好崩溃分析与性能监控?

京东科技开发者

云计算 云服务

《迅雷链精品课》第一课:认识区块链

迅雷链

区块链

全面解析ArrayList,超详细!

程序员的时光

面试 ArrayList JAVA集合

数据结构与算法系列之栈&队列(GO)

书旅

数据结构与算法 Go 语言

数据结构与算法系列之链表操作全集(三)(GO)

书旅

数据结构 Go 语言

第三届进博会恒大农牧开馆迎客,旗下进口食品受热捧!

最新动态

第七周总结

嗯,查询滑动窗口最大值的这4种方法不错...

王磊

Java 数据结构和算法

体验RxJava和lambda

程序员欣宸

第7周 性能优化(一)作业

蓝黑

极客大学架构师训练营

架构师训练营第 1 期 第 7 周作业

李循律

极客大学架构师训练营

第七周作业

训练营第三周学习总结

爱码士

训练营

天啦撸!打印日志竟然只晓得 Log4j?

沉默王二

Java 日志 log4j

程序员的十年之痒

苹果看辽宁体育

程序员 程序人生

2020LF AI&DATA DAY(AI开源日):中国开源社区迈入全球化新征程

tomcat打包成rpm包

lee

tomcat rpm

分库分表的 9种分布式主键ID 生成方案,挺全乎的

程序员小富

分库分表 Java 分布式

大厂程序员必备的一套浏览器书签,我帮你整理好了。[下载导入浏览器]

小傅哥

Java 程序员 小傅哥 资料整理 浏览器书签

架构师训练营第八周总结

邓昀垚

简析低代码开发与传统开发的区别与优势

Marilyn

敏捷开发 低代码

“开源软件供应链点亮计划-暑期2020”公布结果 基于ChubaoFS开发的项目获得最佳质量奖

京东科技开发者

大数据 开源 云原生

Reactor:深入理解reactor core

程序那些事

响应式编程 reactor 程序那些事 响应式系统 reactivex

训练营第三周作业

爱码士

训练营

架构师训练营第 1 期第 8 周作业

业哥

第 7 周 性能优化(一)总结

蓝黑

极客大学架构师训练营

架构师训练营第 1 期第 7 周作业

owl

极客大学架构师训练营

架构师训练营第八周作业

邓昀垚

极客大学架构师训练营

接口测试如何在post请求中传递文件

测试人生路

接口测试

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