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

    你可能感兴趣的文章
    POJ 3083 Children of the Candy Corn 解题报告
    查看>>
    POJ 3253 Fence Repair C++ STL multiset 可解 (同51nod 1117 聪明的木匠)
    查看>>
    Qt笔记——控件总结
    查看>>
    poj 3262 Protecting the Flowers 贪心
    查看>>
    poj 3264(简单线段树)
    查看>>
    Qt笔记——布局管理三件套分割窗口、停靠窗口和堆栈窗口
    查看>>
    poj 3277 线段树
    查看>>
    POJ 3349 Snowflake Snow Snowflakes
    查看>>
    POJ 3411 DFS
    查看>>
    poj 3422 Kaka's Matrix Travels (费用流 + 拆点)
    查看>>
    Qt笔记——官方文档全局定义(二)Functions函数
    查看>>
    POJ 3468 A Simple Problem with Integers
    查看>>
    poj 3468 A Simple Problem with Integers 降维线段树
    查看>>
    poj 3468 A Simple Problem with Integers(线段树 插线问线)
    查看>>
    poj 3485 区间选点
    查看>>
    poj 3518 Prime Gap
    查看>>
    poj 3539 Elevator——同余类bfs
    查看>>
    Qt笔记——官方文档全局定义(三)Macros宏
    查看>>
    poj 3628 Bookshelf 2
    查看>>
    Qt笔记——官方文档全局定义(一)Types数据类型
    查看>>