Gtest:测试断言详细介绍

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)

  • 功能:检查指针是否不为空。
  • 解释:如果 ptrNULL,断言失败。
  • 示例
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 类型的值是否近似相等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值