GoogleTest - 断言

GoogleTest 中的断言是类似于函数调用的宏。它们用于以各种方式验证代码的行为。它可以检查布尔条件、比较值、验证字符串和浮点值。

此处,术语是指预处理器指令。它定义了一段代码,您可以在测试过程中多次重复使用。

如果断言失败,则会打印失败消息以及断言的源文件和失败的行号。还可以提供自定义失败消息,该消息将附加到失败消息中。

断言类型

GoogleTest 中有两种类型的断言,如下所示 −

  • EXPECT_*
  • ASSERT_*

在两种断言中,EXPECT_* 是首选,因为它允许报告多个失败。

EXPECT_* 断言

EXPECT_* 是非致命断言,这意味着即使它们失败,测试仍会继续运行。换句话说,它会产生非致命故障。由于此功能,您可以使用它来测试多个条件而不会阻塞代码。

此外,您还可以使用 << 提供要附加到断言的自定义失败消息。运算符

常见的 EXPECT_* 断言

一些常用的 EXPECT_* 断言是 −

  • EXPECT_TRUE(condition) − 测试条件是否为 TRUE。
  • EXPECT_EQ(val1, val2) − 执行相等性测试。
  • EXPECT_LT(val1, val2) − 测试 val1 是否小于 val2。
  • EXPECT_GT(val1, val2) − 测试 val1 是否大于 val2。
  • EXPECT_THROW(statement, exception_type) − 期望抛出特定异常。
  • EXPECT_STREQ(str1, str2) − 测试两个给定字符串是否相等。

示例

以下示例演示了 EXPECT_* 断言的用法。

#include <gtest/gtest.h>

// 测试基本断言
TEST(Test1, ExpectAssertions) {
    // 期望两个字符串相等
    EXPECT_STREQ("DDaaCC", "DDaaCC");
    // 期望相等
    EXPECT_EQ(12, 2 * 6);
}

运行时,将显示以下输出 −

Test project D:/gTest/test4/build
    Start 1: Test1.ExpectAssertions
1/1 Test #1: Test1.ExpectAssertions ...........   Passed    0.02 sec

100% tests passed, 0 tests failed out of 1

Total Test time (real) =   0.08 sec

ASSERT_* 断言

EXPECT_* 不同,ASSERT_* 断言是致命的。如果发生故障,它将立即中止当前测试函数,这也会阻止在该测试套件中执行任何进一步的代码。

如果继续测试没有意义或继续测试可能导致误导性结果,则应使用 ASSERT_*。

常见的 ASSERT_* 断言

一些常用的 ASSERT_* 断言是 −

  • ASSERT_TRUE(condition) − 验证条件是否为 TRUE。
  • ASSERT_EQ(val1, val2) − 断言两个值相等。
  • ASSERT_LT(val1, val2) − 检查第一个值是否小于第二个。
  • ASSERT_GT(val1, val2) − 测试第一个值是否大于第二个值。
  • ASSERT_THROW(statement, exception_type) − 期望指定语句抛出特定异常。

示例

让我们看一个 ASSERT_* 断言的实际示例。

#include <gtest/gtest.h>

// 测试基本断言
TEST(Test1, AssertAssertions) {
    // 断言条件为真
    ASSERT_TRUE(strcmp("DDaaCC", "DDaaCC") == 0);
    // 断言第一个值小于第二个值
    ASSERT_LT(2 * 6, 13);
}

运行此代码时,将产生以下结果 −

Test project D:/gTest/test4/build
    Start 1: Test1.AssertAssertions
1/1 Test #1: Test1.AssertAssertions ...........   Passed    0.03 sec

100% tests passed, 0 tests failed out of 1

Total Test time (real) =   0.07 sec