C++ 测试框架GoogleTest入门介绍

 更新时间:2023年04月03日 16:36:16   作者:ENG八戒  
这篇文章主要为大家介绍了C++测试框架GoogleTest入门基础,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

引言

开发者虽然主要负责工程里的开发任务,但是每个开发完毕的功能都是需要开发者自测通过的,所以经常会听到开发者提起单元测试的话题。那么今天我就带大伙一起来看看大名鼎鼎的谷歌 C++ 测试框架 GoogleTest.

简单介绍

来看看谷歌官方是怎么介绍这个框架的:

Googletest 是由测试技术团队根据 Google 的特定要求和约束开发的测试框架。无论您是在 Linux,Windows 还是 Mac 上工作,如果您编写 C++ 代码,googletest 都可以为您提供帮助。它支持任何类型的测试,而不仅仅是单元测试。

虽然谷歌是根据特定的需求和限制条件来开发这个框架的,但是它自己也指明了这个框架还可以用于其它用途,比如作为模拟器使用,当然这就扯远了,暂且不提。

谷歌在开发这套框架的时候,是有一套基本的设计思路的。

他们认为测试应该是相互独立而且是可重复的。如果正在做的测试由于其他测试的成功或失败而受到影响,这无疑会令人感到痛苦。GoogleTest 通过在不同的对象上运行不同的测试来实现测试的相互隔离。当其中一个或多个测试失败时,测试框架还允许测试者继续单独运行测试用例以达到快速调试。测试应该组织良好,并反映测试代码的结构。有很多测试其实可以共享数据和子例程的,那么 Googletest 提供了测试套件的概念将相关测试分组,测试套件中的所有测试就可以共享数据和子例程了。这种模式其实很常见,并且使得测试易于维护,特别是当你需要切换到新的代码工程时,测试流程将极大简化。

像谷歌这种规模的科技企业,内部的 C++ 项目非常之多,还是跨平台的,那么就对测试框架有平台无关的要求了。GoogleTest 正是如此,无论你是用的是那款编译器,哪个平台,通吃。

当然,测试的过程中理应提供尽可能全面的信息帮助开发者理解执行软件过程,GoogleTest 也不例外。就算测试过程中,某个测试执行失败被停止了,测试框架也会继续其它测试。如果你不希望某个测试由于失败而停止,可以设置该测试为非致命报错(non-fatal)。像这样的测试过程,可以帮助开发者在单个运行-编辑-编译周期中找到尽可能多的问题 bug。这样的测试框架是不是很高效?

虽说问题 bug 出现就够令开发者讨厌的了,但是自测过程的繁琐事那就更糟心了(头发怎么掉得那么快),比如,开发者除了需要测试具体内容还得自己跟踪测试清单。Googletest 就可以帮助你从这里边脱身出来,做一枚潇洒的码农。

这里问一句,你用过 JUnit 或 PyUnit 吗?如果有的话,那么 Googletest 对你来说真的是易如反掌了。据说 Googletest 是基于 xUnit 架构开发而来。至于什么是 xUnit 架构,有机会我再聊聊吧。

测试框架在测试过程中,基本的测试操作就是使用断言(assert)来验证测试代码的行为,崩溃或者断言失败都表示被测试代码的行为不正确,否则正确。

初体验

来看一下简单的测试样例(环境配置安装会在后面有详细介绍)

#include <math.h>
#include <gtest/gtest.h>
int square(const int a)
{
    int b = a * a;
    if (b != b) {
        return -1;
    } else {
        return a * a;
    }
}
TEST(SquareTest, PositiveNos) { 
    ASSERT_EQ(0, square(0));
    ASSERT_EQ(36, square(6));
    ASSERT_EQ(324, square(18));
}
int main(int argc, char **argv)
{
    testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}

这个测试样例是为了测试函数 int square(const int a) 的行为是否正确。

编译生成可执行文件之后,运行起来

可以看到,上面总共有一个测试套件和一个测试。首先启动一次全局测试环境,使用框架提供的宏 TEST() 创建了一个测试套件,命名为 SquareTest,和一个测试,命名为 PositiveNos。然后,运行测试套件内包含的所有测试,测试通过 OK。全部测试结束后,卸载全局测试环境。汇总全部测试结果 PASSED。测试流程结束。

以上就是C++ 测试框架GoogleTest入门介绍的详细内容,更多关于C++ 测试框架GoogleTest的资料请关注脚本之家其它相关文章!

相关文章

  • 详解C++中typedef 和 #define 的区别

    详解C++中typedef 和 #define 的区别

    这篇文章主要介绍了C++中typedef 与 #define 的区别,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • C语言动态数组的使用实现代码

    C语言动态数组的使用实现代码

    这篇文章主要介绍了C语言动态数组的使用实现代码的相关资料,需要的朋友可以参考下
    2017-01-01
  • C++流操作之fstream用法介绍

    C++流操作之fstream用法介绍

    这篇文章详细介绍了C++流操作之fstream的用法,有需要的朋友可以参考一下
    2013-09-09
  • short与int转换的小例子

    short与int转换的小例子

    short与int转换的小例子,需要的朋友可以参考一下
    2013-04-04
  • C++设计模式之简单工厂模式的实现示例

    C++设计模式之简单工厂模式的实现示例

    这篇文章主要给大家介绍了关于C++设计模式之简单工厂模式的相关资料,简单工厂模式,主要用于创建对象,添加类时,不会影响以前的系统代码,需要的朋友可以参考下
    2021-06-06
  • C语言文件操作零基础新手入门保姆级教程

    C语言文件操作零基础新手入门保姆级教程

    在实际应用中,我们往往需要对文件进行操作,下面这篇文章主要给大家分享了关于C语言文件操作的零基础新手入门保姆级教程,文中通过示例代码以及图片介绍的非常详细,需要的朋友可以参考下
    2021-10-10
  • C++调用Go方法的字符串传递问题及解决方案

    C++调用Go方法的字符串传递问题及解决方案

    这篇文章主要介绍了C++调用Go方法的字符串传递问题及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • 解析C语言中如何正确使用const

    解析C语言中如何正确使用const

    本篇文章是对C语言中如何正确使用const,进行了详细的分析介绍。需要的朋友参考下
    2013-05-05
  • C语言数据结构之二叉树的非递归后序遍历算法

    C语言数据结构之二叉树的非递归后序遍历算法

    这篇文章主要介绍了C语言数据结构之二叉树的非递归后序遍历算法的相关资料,希望通过本文能帮助到大家,让大家实现这样的功能,需要的朋友可以参考下
    2017-10-10
  • 浅谈QT内存泄漏

    浅谈QT内存泄漏

    本文主要介绍了浅谈QT内存泄漏,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09

最新评论