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