Gtest:测试断言详细介绍
gtest) 提供了多种断言(Assertions)来帮助编写单元测试。这些断言用于验证测试条件是否满足,失败时提供相关的调试信息。
·
Google Test (gtest) 提供了多种断言(Assertions)来帮助编写单元测试。这些断言用于验证测试条件是否满足,失败时提供相关的调试信息。
断言类型
Google Test 断言可以分为两大类:
- Fatal assertions(致命断言):这些断言在失败时会立即终止当前的测试用例。
- Non-fatal assertions(非致命断言):这些断言在失败时不会中止当前测试用例,而是继续运行,直到测试用例结束。
两类断言的命名规则:
- 致命断言:以
ASSERT_开头。 - 非致命断言:以
EXPECT_开头。
1. 基本断言
1.1 EXPECT_EQ(val1, val2) / ASSERT_EQ(val1, val2)
- 功能:检查两个值是否相等。
- 解释:
EXPECT_EQ是非致命断言,ASSERT_EQ是致命断言。如果val1 != val2,断言失败。 - 示例:
EXPECT_EQ(10, sum(5, 5)); // sum(5, 5) 必须等于 10
1.2 EXPECT_NE(val1, val2) / ASSERT_NE(val1, val2)
- 功能:检查两个值是否不相等。
- 解释:如果
val1 == val2,断言失败。 - 示例:
EXPECT_NE(10, difference(15, 5)); // difference(15, 5) 不应该等于 10
1.3 EXPECT_LT(val1, val2) / ASSERT_LT(val1, val2)
- 功能:检查
val1是否小于val2。 - 解释:如果
val1 >= val2,断言失败。 - 示例:
EXPECT_LT(5, 10); // 5 应该小于 10
1.4 EXPECT_LE(val1, val2) / ASSERT_LE(val1, val2)
- 功能:检查
val1是否小于或等于val2。 - 解释:如果
val1 > val2,断言失败。 - 示例:
EXPECT_LE(5, 5); // 5 应该小于或等于 5
1.5 EXPECT_GT(val1, val2) / ASSERT_GT(val1, val2)
- 功能:检查
val1是否大于val2。 - 解释:如果
val1 <= val2,断言失败。 - 示例:
EXPECT_GT(10, 5); // 10 应该大于 5
1.6 EXPECT_GE(val1, val2) / ASSERT_GE(val1, val2)
- 功能:检查
val1是否大于或等于val2。 - 解释:如果
val1 < val2,断言失败。 - 示例:
EXPECT_GE(10, 10); // 10 应该大于或等于 10
2. 布尔断言
2.1 EXPECT_TRUE(condition) / ASSERT_TRUE(condition)
- 功能:检查条件是否为真。
- 解释:如果
condition为假,断言失败。 - 示例:
EXPECT_TRUE(isEven(4)); // 检查 isEven(4) 返回 true
2.2 EXPECT_FALSE(condition) / ASSERT_FALSE(condition)
- 功能:检查条件是否为假。
- 解释:如果
condition为真,断言失败。 - 示例:
EXPECT_FALSE(isEven(5)); // 检查 isEven(5) 返回 false
3. 字符串断言
3.1 EXPECT_STREQ(str1, str2) / ASSERT_STREQ(str1, str2)
- 功能:检查两个 C 字符串是否相等。
- 解释:使用
strcmp比较两个 C 风格的字符串。如果str1 != str2,断言失败。 - 示例:
EXPECT_STREQ("hello", greet()); // greet() 应该返回 "hello"
3.2 EXPECT_STRNE(str1, str2) / ASSERT_STRNE(str1, str2)
- 功能:检查两个 C 字符串是否不相等。
- 解释:如果
str1 == str2,断言失败。 - 示例:
EXPECT_STRNE("hello", greet()); // greet() 不应该返回 "hello"
3.3 EXPECT_STRCASEEQ(str1, str2) / ASSERT_STRCASEEQ(str1, str2)
- 功能:检查两个 C 字符串是否不区分大小写相等。
- 解释:如果两个字符串在忽略大小写的情况下不相等,断言失败。
- 示例:
EXPECT_STRCASEEQ("Hello", "hello"); // "Hello" 和 "hello" 不区分大小写应该相等
3.4 EXPECT_STRCASENE(str1, str2) / ASSERT_STRCASENE(str1, str2)
- 功能:检查两个 C 字符串是否不区分大小写不相等。
- 解释:如果两个字符串在忽略大小写的情况下相等,断言失败。
- 示例:
EXPECT_STRCASENE("Hello", "world"); // "Hello" 和 "world" 不相等,即使忽略大小写
4. 指针断言
4.1 EXPECT_NULL(ptr) / ASSERT_NULL(ptr)
- 功能:检查指针是否为空(
NULL)。 - 解释:如果
ptr不为NULL,断言失败。 - 示例:
EXPECT_NULL(getPointer()); // getPointer() 应该返回 NULL
4.2 EXPECT_NOTNULL(ptr) / ASSERT_NOTNULL(ptr)
- 功能:检查指针是否不为空。
- 解释:如果
ptr为NULL,断言失败。 - 示例:
EXPECT_NOTNULL(getValidPointer()); // getValidPointer() 不应该返回 NULL
5. 异常断言
5.1 EXPECT_THROW(statement, exception_type) / ASSERT_THROW(statement, exception_type)
- 功能:检查某段代码是否抛出指定类型的异常。
- 解释:如果
statement没有抛出exception_type类型的异常,断言失败。 - 示例:
EXPECT_THROW(func(), std::runtime_error); // func() 应该抛出 std::runtime_error 异常
5.2 EXPECT_ANY_THROW(statement) / ASSERT_ANY_THROW(statement)
- 功能:检查某段代码是否抛出任何类型的异常。
- 解释:如果
statement没有抛出任何异常,断言失败。 - 示例:
EXPECT_ANY_THROW(func()); // func() 应该抛出某个异常
5.3 EXPECT_NO_THROW(statement) / ASSERT_NO_THROW(statement)
- 功能:检查某段代码是否不抛出任何异常。
- 解释:如果
statement抛出了异常,断言失败。 - 示例:
EXPECT_NO_THROW(func()); // func() 不应该抛出异常
6. 浮点数断言
由于浮点数在计算机中存储时的精度问题,使用精确相等比较可能导致错误,因此 Google Test 提供了对浮点数的近似比较。
6.1 EXPECT_FLOAT_EQ(val1, val2) / ASSERT_FLOAT_EQ(val1, val2)
- 功能:检查两个
float类型的值是否近似相等。 - 解释:两者的差异需要在一定范围内才算相等。
- 示例:
EXPECT_FLOAT_EQ(1.0f, 1.0f + 1e-7); // 两个 float 值应该接近相等
6.2 EXPECT_DOUBLE_EQ(val1, val2) / ASSERT_DOUBLE_EQ(val1, val2)
- 功能:检查两个
double类型的值是否近似相等。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)