Google C++测试框架系列:入门 您所在的位置:网站首页 google测试框架是什么 Google C++测试框架系列:入门

Google C++测试框架系列:入门

2024-06-15 17:24| 来源: 网络整理| 查看: 265

原始链接:V1_6_Primer

GTest或者Google Test: Google的C++测试框架。 Test Fixtures: 这个词实在找不到对应的中文。 Bug: 太常用了,不翻译。 House keeping chores: 家常事务。指非核心的编码工作,比如测试代码的assert, log以及用例管理等工作。 set-up/tear-down: 指运行测试前的准备和之后的清理工作。 test case: 测试用例,管理测试的单位,一个测试用例可以包含一个或多个测试。

在阅读之前,推荐阅读《为什么有如此多的C++测试框架 - from Google Testing Blog》了解一些背景知识。

目录

介绍:为什么使用GTest? 开始一个新项目 基本概念 断言 基本断言 二元比较 字符串比较 简单测试 Test Fixtures: 在多个测试中使用相同的数据配置 调用测试 编写main()函数 VC用户的重要注意事项 下一步往去哪儿 已知局限性

 

介绍:为什么使用GTest?

GTest帮助你写更好的C++测试代码。

不管你在什么平台上工作,无论是Linux,Windows还是Mac,只要你使用C++,GTest就可以帮助你。

对于什么是一个好的测试,GTest如何来帮助实现这个目标,我们的观点如下:

测试必须是独立并且可重复的。如果某个测试的通过还是失败依赖于其它测试的执行结果,那么调试它将是非常困难的。GTest通过在不同的项目下分别执行测试使得它们相互隔离。当某个测试失败后,GTest允许你单独执行它以便快速调试。 测试的组织必须很好的反映测试代码的结构。GTest以测试用例为单位把那些能共享相同数据和代码的测试组织起来。这种常见的模式使得我们可以很方便的识别和维护测试。当人们切换项目在新的代码基础上工作时,这种一致性会显得特别有帮助。 测试必须可移植和可重用。开源社区的很多代码都是平台中立的,所以它们的测试也必须平台中立。GTest可以在不同的操作系统上工作,使用不同的编译器,支持或不支持异常,所以GTest可以很容易的在不同配置上工作。(注意:当前的发行版只包含Linux的构建脚本,我们正努力工作以支持其它平台。) 一个测试失败后必须提供尽可能多的提示信息。GTest不会因为一个失败就停止继续工作。它仅仅停止当前测试并且继续执行后续的测试。你还可以设置测试在遇到非致命失败时继续执行并打印相关信息。通过这种方法,你可以在一个“执行-编辑-编译”周期中发现和修复多处bug。 测试框架必须把测试编写者从繁重的家常事务中解脱出来以集中精力于测试本身。GTest自动维护和跟踪所有定义的测试,不需要你为了运行测试而去手工枚举所有测试。 测试必须迅速。使用GTest,你可以在不同测试之间使用共享的资源,而只需要做一次set-up/tear-down的工作,并且测试和测试之间相互独立。

因为GTest只用流行的xUnit架构,只要你熟练使用JUnit或PyUnit就一定会感到非常亲切。如果以前没玩过的话,只要花10分钟就可以上手了。好吧,我们继续!

开始一个新项目

使用GTest编写测试程序,你必须先把GTest编译成一个库文件然后在你的测试程序中链接它。我们为主流的构建系统准备了一些现成的构建脚本:GTest根目录下的msvc/用于Visual Studio,xcode/用于Mac的Xcode,make/用于GNU make,codegear/用于Borland C++ Builder,另外还有autotools script(已淘汰)和CMakeLists用于CMake(推荐的)。如果你的构建系统不在以上列表中,你可以参考make/Makefile文件学习GTest是如何被编译的(一般来说编译src/gtest-all.cc,把GTEST_ROOT和GTEST_ROOT/include加到头文件搜索路径中,GTEST_ROOT指GTest根目录)。

基本概念

使用GTest你肯定会接触到断言这个概念。断言是用来判断某个条件是否为真。一个断言的结果可以是成功,也可以是非致命失败或致命失败。如果发生了一个致命失败,当前函数就会退出,不然程序还是会继续正常执行。

测试使用断言来判断测试代码的行为。如果测试崩溃了或者断言失败,那么这个测试就失败了,不然就是通过。

一个测试用例包含一个或多个测试。你必须用测试用例把你的测试进行分组以反映测试代码的结构。当某个测试用例中的多个测试共享一些对象或程序时,你可以把这些对象和程序放进test fixture类。

一个测试程序可以包含多个测试用例。

我们现在开始讲解如何编写一个测试程序,先从单个断言开始,然后逐步到测试和测试用例。

断言

GTest的断言使用宏来组合一组函数调用。你通过对某个行为实施断言的结果来测试一个类或者函数。如果断言失败,GTest打印断言所在的文件和行数,以及失败信息。你还可以在GTest标准的输出信息之外添加自定义的失败信息。

对一个行为实施断言可能产生不同的影响。ASSERT_*版本在失败时会产生致命失败并退出当前函数。而EXPECT_*版本则产生一个非致命失败,而且不会退出当前函数。一般来说我们更倾向使用EXPECT_*版本的断言,因为这使得我们在一个测试中可以报告多个失败。但是如果失败后执行程序变得没有意义,那么你就该使用ASSERT_*版本。

因为ASSERT_*版本的断言在失败后立即从当前函数返回,所以可能会因为跳过清理代码导致资源泄露。根据泄露的性质,你也许需要或不需要修正这个问题。但无论如何牢记你有可能因为断言错误导致额外的堆检查错误(heap checker error)。

简单的只用流定向操作符"



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有