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>

// to test basic assertions
TEST(Test1, ExpectAssertions) {
  // expect two strings to be equal
  EXPECT_STREQ("DDaaCC", "DDaaCC");
  // expect equality
  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>

// to test basic assertions
TEST(Test1, AssertAssertions) {
  // assert that the condition is true
  ASSERT_TRUE(strcmp("DDaaCC", "DDaaCC") == 0);
  // assert first value is less than second 
  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
廣告

© . All rights reserved.