BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

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

| 作者 Mike Bria 关注 0 他的粉丝 ,译者 张龙 关注 14 他的粉丝 发布于 2008年7月18日. 估计阅读时间: 4 分钟 | CNUTCon 了解国内外一线大厂50+智能运维最新实践案例。

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

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

google就会搞点这些噱头 by wang yi

google就会搞点这些噱头。

代码写得一般 by gu enigma

代码写得一般

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

2 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT