博客
关于我
Google Test 介绍(一)
阅读量:131 次
发布时间:2019-02-26

本文共 1657 字,大约阅读时间需要 5 分钟。

为什么选择 Google Test

Google Test(简称 GTest)是一款专为 C++ 开发的测试框架,旨在满足谷歌特定项目的测试需求。无论你身处 Linux、Windows 还是 Mac 平台,只要你编写 C++ 代码,GTest 都能为你提供强有力的支持。此外,GTest 不仅支持单元测试,还是一个通用的测试框架,可以用于各种测试场景。

GTest 的基本概念

在 GTest 中,"Test"、"Test Case" 和 "Test Suite" 这三个概念经常被混淆。根据 GTest 的设计理念,"Test Case" 用于将相关的 "Test" 组合在一起,而现代软件质量书籍和 ISTQB(国际软件测试资格认证委员会)则通常使用 "Test Suite" 来替代 "Test Case"。在 GTest 中,"Test" 对应于 ISTQB 的 "Test Case"。

以下是三个概念的对应关系:

含义 GTest 中的 Term ISTQB 中的 Term
验证特定程序路径的特定输入值及其结果 TEST() Test Case
一组与某个组件相关的多个测试 Test Case Test Suite

GTest 的断言机制

在 GTest 中,最基本的操作是编写断言(assertion),断言用于检查某个条件是否为真。断言的结果可以是成功、非致命失败或致命失败。当断言失败时,GTest 会提供详细的错误信息,包括断言所在的文件和行号。

GTest 中的 "Test" 通过断言来验证代码的行为。如果 "Test" 因断言失败而崩溃或抛出非致命错误,则该 "Test" 就被视为失败。反之,则认为测试已通过。

一个 "Test Case" 可以包含多个 "Test"。为了提高测试代码的可维护性和复用性,我们可以将共享的对象和子程序放入一个 "Test Fixture" 类中。一个测试程序可以包含多个 "Test Case"。

GTest 提供了两种类型的断言:

  • 致命断言(ASSERT_*):当断言失败时,立即终止当前函数,导致程序崩溃。
  • 非致命断言(EXPECT_*):当断言失败时,仅记录错误信息,不会终止程序。
  • 由于致命断言可能导致程序中后续清理操作被跳过,从而引发内存泄露问题,因此在使用致命断言时需要特别注意这一点。

    GTest 提供了丰富的断言类型,包括:

    • 基本断言

      • ASSERT_TRUE(condition)
      • EXPECT_TRUE(condition)
      • ASSERT_FALSE(condition)
      • EXPECT_FALSE(condition)
    • 二元断言

      • ASSERT_EQ(val1, val2)
      • EXPECT_EQ(val1, val2)
      • ASSERT_NE(val1, val2)
      • EXPECT_NE(val1, val2)
      • ASSERT_LT(val1, val2)
      • EXPECT_LT(val1, val2)
      • ASSERT_LE(val1, val2)
      • EXPECT_LE(val1, val2)
      • ASSERT_GT(val1, val2)
      • EXPECT_GT(val1, val2)
      • ASSERT_GE(val1, val2)
      • EXPECT_GE(val1, val2)
    • 字符串断言

      • ASSERT_STREQ(str1, str2)
      • EXPECT_STREQ(str1, str2)
      • ASSERT_STRNE(str1, str2)
      • EXPECT_STRNE(str1, str2)
      • ASSERT_STRCASEEQ(str1, str2)
      • EXPECT_STRCASEEQ(str1, str2)
      • ASSERT_STRCASENE(str1, str2)
      • EXPECT_STRCASENE(str1, str2)

    通过这些断言,我们可以对代码的行为进行全面验证。例如,可以验证某个函数返回的值是否等于预期值,或者某个操作是否成功完成。

    转载地址:http://jqxf.baihongyu.com/

    你可能感兴趣的文章
    numpy学习笔记3-array切片
    查看>>
    numpy数组替换其中的值(如1替换为255)
    查看>>
    numpy数组索引-ChatGPT4o作答
    查看>>
    NUMPY矢量化np.prod不能构造具有超过32个操作数的ufunc
    查看>>
    Numpy矩阵与通用函数
    查看>>
    numpy绘制热力图
    查看>>
    numpy转PIL 报错TypeError: Cannot handle this data type
    查看>>
    Numpy闯关100题,我闯了95关,你呢?
    查看>>
    nump模块
    查看>>
    Nutch + solr 这个配合不错哦
    查看>>
    NuttX 构建系统
    查看>>
    NutUI:京东风格的轻量级 Vue 组件库
    查看>>
    NutzCodeInsight 2.0.7 发布,为 nutz-sqltpl 提供友好的 ide 支持
    查看>>
    NutzWk 5.1.5 发布,Java 微服务分布式开发框架
    查看>>
    NUUO网络视频录像机 css_parser.php 任意文件读取漏洞复现
    查看>>
    Nuxt Time 使用指南
    查看>>
    NuxtJS 接口转发详解:Nitro 的用法与注意事项
    查看>>
    NVDIMM原理与应用之四:基于pstore 和 ramoops保存Kernel panic日志
    查看>>
    NVelocity标签使用详解
    查看>>
    NVelocity标签设置缓存的解决方案
    查看>>