NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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

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

关注

评论

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

极客时间 - 架构师培训 - 6 期作业

Damon

观智能化浪潮如何改变产业链创新

CECBC

【计算机网络】为什么要三次握手四次挥手?

烫烫烫个喵啊

TCP 计算机网络

ARTS WEEK5

紫枫

ARTS 打卡计划

ARTS打卡 - Week 07

teoking

低代码与无代码

lidaobing

低代码 无代码开发

一致性hash算法及标准差验证

Damon

【计算机网络】如何实现可靠数据传输?

烫烫烫个喵啊

ARTS打卡 第7周

引花眠

ARTS 打卡计划

简述CAP理论

lei Shi

智慧4S店解决方案发布,看英特尔如何引领汽车销售行业变革

最新动态

手把手整合SSM框架

JavaPub

分布式系统设计理念这么难学?

架构师修行之路

架构 分布式

Go:Stringer命令,通过代码生成提高效率

陈思敏捷

stringer Go 语言

Cache解决算法 Charles断点调试breakpoint John 易筋 ARTS 打卡 Week 08

John(易筋)

ARTS 打卡计划

设计模式(1)—什么是设计模式?设计模式的六大原则是什么?

爱嘤嘤嘤斯坦

Java 程序员 编程语言 设计模式 23种设计模式

每周学习总结 - 架构师培训 6期

Damon

昆明市成立两大“高端”中心,区块链赋能生物医药和高原特色农业

CECBC

负载均衡方式

羽球

负载均衡

抽象工厂模式

Leetao

Python 面试 设计模式

ARTS-WEEK6

一周思进

ARTS 打卡计划

程序的机器级表示-程序的编码

引花眠

计算机基础

MySQL实战45讲总结

`

MySQL

进程、线程基础知识全家桶,30 张图一套带走

小林coding

Linux 操作系统 计算机基础 进程 进程线程区别

ARTS打卡-06

Geek_yansheng25

数据驱动 vs 关键字驱动:对UI自动化测试框架搭建的探索

冯文辉

DevOps 敏捷 自动化测试

架构师课程第六周 作业

杉松壁

每周学习总结 - 架构师培训 5 期

Damon

编程核心能力之抽象

顿晓

抽象 编程日课

redis系列之——高可用(主从、哨兵、集群)

诸葛小猿

redis redis集群 redis哨兵 redis主从

SpringBoot 入门:03 - 统一请求返回

封不羁

Java spring springboot

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