写点什么

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

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

关注

评论

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

如何利用java实现一个布隆过滤器?

Java 布隆过滤器

翻遍GitHub帮你总结了一份并发图册+高并发笔记,一次性搞懂并发编程

小小怪下士

Java 程序员 后端 高并发 并发

AE/PR插件-去朦胧除雾霾增强色彩调色插件ClearPlus

真大的脸盆

Mac AE插件 AE

用户费力度建设初探

Qunar技术沙龙

去哪儿网 用户费力度

面对复杂的系统与众多的插件,如何确保Jenkins项目的安全性?

龙智—DevSecOps解决方案

ci 持续集成 jenkins

现代IT服务与企业服务管理:借助Jira Service Management实现团队互联,打造高效透明的服务体验

龙智—DevSecOps解决方案

ITSM

MLCC龙头涨价;车厂砍单芯片;台积电28nm设备订单全部取消!

元器件秋姐

芯片 汽车 资讯 新能源 MLCC

Go_Gin之初体验

神木鼎

golang 日更 gin框架

如何在 Mac 上查看显示刷新率

互联网搬砖工作者

MoE 系列(三)|使用 Istio 动态更新 Go 扩展配置

SOFAStack

golang 程序员 开发 java; envoy

【开源之夏 2023】欢迎报名 SOFAStack 社区项目!

SOFAStack

开源 开发 SOFA 开源之夏 程序员 java

Git合并冲突的根本原因和解决方法

龙智—DevSecOps解决方案

git merge

还在分不清各种IO模型?

Java你猿哥

Java Linux io I/O模型 Java IO

头部企业走入无人区,国产数智化厂商挑大梁

用友BIP

软件测试丨Pytest学习笔记-Mark标记、Skip跳过、xFail预期失败

测试人

软件测试 自动化测试 测试开发 pytest

Last Week in Milvus

Zilliz

Milvus Zilliz 向量数据库

用scrum敏捷工具做敏捷需求管理

顿顿顿

Scrum 敏捷开发 敏捷项目管理 看板工具

如何降低电动汽车软件的开发成本和风险?

龙智—DevSecOps解决方案

电动汽车市场 电动汽车软件

Spring Boot如何优雅提高接口数据安全性

Java spring Spring Boot

GitHub发布即百万!字节内网超实用 java性能优化手册,star超十万

Java你猿哥

Java JVM ssm Java性能调优 java程序优化

今年互联网是“银二铜三铁四丐五”?程序员面试如何破局?

Java你猿哥

Java 架构 算法 多线程 java面试

兼顾可扩展、高并发与数据一致性:咸鱼优惠系统设计实践

Java你猿哥

Java 架构 ssm 架构设计 并发

【网易云信】网易云信 RTC 音频问题排查的挑战与实践

网易智企

RTC 实时音视频 AIGC

大开眼界!Jenkins结合SpringCloud+K8S,打通微服一条龙技术讲解

Java Kubernetes k8s Spring Cloud jenkins

做客《创新之路》,Tapdata 创始人唐建法对话央视著名主持人李雨霏,畅聊创业故事

tapdata

网易云信 RTC 音频问题排查的挑战与实践

网易云信

RTC 实时音视频 AIGC

全新问世!阿里内藏版的SpringBoot 2.5实战笔记,全面覆盖新特性

Java spring 微服务 Spring Boot 框架

NFTScan 开发者平台发布 CU 付费方案,为 Web3 初创团队提供多链 NFT API 服务

NFT Research

NFT #Web3

AI数据采集——数字世界的智能伙伴

数据堂

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