博客
关于我
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/

    你可能感兴趣的文章
    python3----ASCII
    查看>>
    Python3-selenium自动化测试框架,结合HTMLTestRunner测试报告!
    查看>>
    Python3-如何自我更新作为服务运行的应用程序
    查看>>
    Python3.1-网格模拟概念性问题
    查看>>
    Python3.12 解决conda环境libstdc++版本过低问题
    查看>>
    python3.2批量查询IP地址区域
    查看>>
    Python3.5中协程和未来/任务之间的区别?
    查看>>
    python3.5实现socket通讯(TCP)
    查看>>
    python3.6 ubuntu部署nginx、 uwsgi、 django
    查看>>
    Python3.6.3中,functools似乎不能用
    查看>>
    python3.6.5+cuda9+cudnn7.1+win10+tensorflow-gpu1.9.0下载配置
    查看>>
    python3.6使用pickle序列化class
    查看>>
    python3.6入门到高阶(全栈) day027 网络通信协议 osi七层模型
    查看>>
    Python3.6属性错误:模块‘;异步没有属性‘;运行‘;
    查看>>
    python3.6版本中的python-weka-wrapper安装失败,错误代码为%1
    查看>>
    Python3.7安装cv2踩过的坑
    查看>>
    python写txt文件
    查看>>
    python关于sorted排序函数详细解析 附实战代码(全)
    查看>>
    python3.8调用m文件,调用matlab
    查看>>
    python3.9新特性_Python 3.9 新特性速览
    查看>>