- GoogleTest 教程
- GoogleTest - 首頁
- GoogleTest - 環境設定
- GoogleTest - 執行第一個測試
- GoogleTest - 命名規範
- GoogleTest - 停用測試
- GoogleTest - 斷言
- GoogleTest - 死亡測試
- GoogleTest - 測試夾具
- GoogleTest - 事件監聽器
- GoogleTest 有用資源
- GoogleTest - 有用資源
- GoogleTest - 討論
GoogleTest - 命名規範
GoogleTest 中有幾個術語可能會讓使用者感到困惑,尤其是測試、測試用例和測試套件。這些術語的含義可能與其他測試框架不同。在本教程中,我們將瞭解它們,以避免在後續章節中可能出現的任何混淆。
測試 & 測試用例
測試指的是一段用於驗證另一段程式碼(通常是函式或類)是否按預期工作程式碼。在 GoogleTest 中,“測試” 術語與國際軟體測試資格委員會 (ISTQB) 材料和各種軟體質量教科書中的“測試用例”術語相同。
要在 GoogleTest 中建立一個簡單的測試,請使用TEST()宏。它定義並命名一個測試函式。此宏接受測試套件的名稱和測試的名稱作為引數值。請注意,它不返回值。
語法
下面給出TEST()宏的語法:
TEST(TestSuiteName, TestName) {
... test body ...
}
測試套件名稱和測試名稱都必須是有效的 C++ 識別符號,並且不應包含任何下劃線 (_) 。
示例
以下程式碼顯示了 GoogleTest 中測試的基本示例:
#include <gtest/gtest.h>
// function to be tested
int divideNum(int nums1, int nums2) {
if (nums2 == 0) {
throw std::invalid_argument("Denominator cannot be zero");
}
return nums1 / nums2;
}
// test
TEST(CheckDivison, ForPositiveInput) {
EXPECT_EQ(12, divideNum(24, 2));
}
// main() function to run the test
int main(int argc, char **argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
以上程式碼的輸出如下:
Test project D:/gTest/test2/build
Start 1: CheckDivison.ForPositiveInput
1/1 Test #1: CheckDivison.ForPositiveInput ....... Passed 0.02 sec
100% tests passed, 0 tests failed out of 1
Total Test time (real) = 0.2 sec
測試套件 & 測試用例
從最初開始,GoogleTest 使用“TestCase”術語來表示一組相關的測試。但是,ISTQB 材料和各種軟體質量教科書使用“測試套件”來表示相同的內容。
因此,GoogleTest 的最新版本開始用“測試套件”替換“TestCase”術語。現在,首選的 API 是 TestSuite。
要建立測試套件,請使用單個測試套件名稱編寫多個測試。但是,每個測試都應該具有唯一的名稱,如下所示:
// test 1
TEST(TestSuiteName, FirstTestName) {
... test body ...
}
// test 2
TEST(TestSuiteName, SecondTestName) {
... test body ...
}
示例
在以下程式碼中,我們正在建立一個測試套件,以在 GoogleTest 中測試除法函式:
#include <gtest/gtest.h>
// function to be tested
int divideNum(int nums1, int nums2) {
if (nums2 == 0) {
throw std::invalid_argument("Denominator cannot be zero");
}
return nums1 / nums2;
}
// test 1
TEST(CheckDivison, ForPositiveInput) {
EXPECT_EQ(12, divideNum(24, 2));
}
// test 2
TEST(CheckDivison, ForNegativeInput) {
EXPECT_EQ(-2, divide(4, -2));
EXPECT_EQ(-2, divide(-4, 2));
EXPECT_EQ(2, divide(-4, -2));
}
// test 3
TEST(CheckDivison, ForZeroDenominator) {
EXPECT_THROW(divide(4, 0), std::invalid_argument);
}
// main() function to run the test
int main(int argc, char **argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
執行此程式碼時,它將顯示以下輸出:
Test project D:/gTest/test2/build
Start 1: CheckDivison.ForPositiveInput
1/3 Test #1: CheckDivison.ForPositiveInput ..... Passed 0.03 sec
Start 2: CheckDivison.ForNegativeInput
2/3 Test #2: CheckDivison.ForNegativeInput ..... Passed 0.01 sec
Start 3: CheckDivison.ForZeroDenominator
3/3 Test #3: CheckDivison.ForZeroDenominator ... Passed 0.02 sec
100% tests passed, 0 tests failed out of 3
Total Test time (real) = 0.10 sec
廣告