- GoogleTest 教程
- GoogleTest - 首頁
- GoogleTest - 環境設定
- GoogleTest - 執行第一個測試
- GoogleTest - 命名法
- GoogleTest - 停用測試
- GoogleTest - 斷言
- GoogleTest - 死亡測試
- GoogleTest - 測試夾具
- GoogleTest - 事件監聽器
- GoogleTest 有用資源
- GoogleTest - 有用資源
- GoogleTest - 討論
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
廣告