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 Suite GoogleTest

要建立測試套件,請使用單個測試套件名稱編寫多個測試。但是,每個測試都應該具有唯一的名稱,如下所示:

// 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
廣告

© . All rights reserved.