本文共 1657 字,大约阅读时间需要 5 分钟。
Google Test(简称 GTest)是一款专为 C++ 开发的测试框架,旨在满足谷歌特定项目的测试需求。无论你身处 Linux、Windows 还是 Mac 平台,只要你编写 C++ 代码,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 中,最基本的操作是编写断言(assertion),断言用于检查某个条件是否为真。断言的结果可以是成功、非致命失败或致命失败。当断言失败时,GTest 会提供详细的错误信息,包括断言所在的文件和行号。
GTest 中的 "Test" 通过断言来验证代码的行为。如果 "Test" 因断言失败而崩溃或抛出非致命错误,则该 "Test" 就被视为失败。反之,则认为测试已通过。
一个 "Test Case" 可以包含多个 "Test"。为了提高测试代码的可维护性和复用性,我们可以将共享的对象和子程序放入一个 "Test Fixture" 类中。一个测试程序可以包含多个 "Test Case"。
GTest 提供了两种类型的断言:
由于致命断言可能导致程序中后续清理操作被跳过,从而引发内存泄露问题,因此在使用致命断言时需要特别注意这一点。
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/