GoogleTest - 測試夾具



在 GoogleTest 中,**測試夾具** 用於當您需要編寫兩個或多個在類似資料上執行的測試時。它允許開發人員為多個不同的測試重用相同的資料配置。**夾具類** 派生自 **::testing::Test** 類,該類在 **gtest.h** 標頭檔案中可用。

如何建立測試夾具?

按照以下步驟在 GoogleTest 中建立測試夾具:

  • 建立一個從 testing::Test 類派生的類。其主體應受保護。
  • 宣告您希望在此類中使用的物件。
  • 然後,定義設定邏輯,該邏輯放置在建構函式或 SetUp() 函式中。它將為每個測試準備物件。
  • 要釋放使用 SetUp() 分配的任何資源,請編寫解構函式或 TearDown() 函式。這是可選的。
  • 最後,為您的測試定義子例程以共享。

語法

建立測試夾具的語法如下:

// Define a test fixture class
class FirstTestFixture : public ::testing::Test {
protected:
    // SetUp() function
    void SetUp() override {
        // setup code comes here
    }

    // TearDown() function
    void TearDown() override {
        // teardown code comes here
    }

    // define common data members for the tests
    data_type variable = value;
};

TEST_F() 宏在測試夾具中的作用

GoogleTest 中的 **TEST_F()** 宏用於定義使用測試夾具類的測試。這裡的 **_F** 代表 Fixture(夾具)。它接受兩個引數,即測試名稱和測試夾具類的名稱。這兩個引數必須是有效的 C++ 識別符號,並且不得包含下劃線(_)。

語法

讓我們看看 TEST_F 宏的語法:

TEST_F(TestFixtureName, TestName) {
  ... code to be tested ...
}

通常,TEST() 宏用於在 GoogleTest 中定義測試。但是,在使用測試夾具時使用 TEST_F() 宏,因為它允許您訪問在該特定測試夾具中定義的物件和子例程。您可以觀察到 TEST_F() 宏的語法,其中聲明瞭測試夾具類的名稱而不是測試套件的名稱。

對於使用 TEST_F() 定義的每個測試,GoogleTest 在執行時建立一個新的測試夾具,使用 SetUp() 函式對其進行初始化,執行測試,透過呼叫 TearDown() 函式進行清理,然後刪除測試夾具。

對夾具中一個測試所做的任何更改都不會影響其他測試,因為同一測試套件中的不同測試具有不同的測試夾具物件。此外,GoogleTest 始終在建立下一個測試夾具之前刪除一個測試夾具。

示例

以下示例說明了如何在 GoogleTest 中使用 TEST_F() 編寫測試夾具。

#include <gtest/gtest.h>

// test fixture class
class FixtureDemo : public ::testing::Test {
protected:
    int* test_var;

    // SetUp() function
    void SetUp() override {
        // dynamically allocating an integer
        test_var = new int(42); 
    }

    // TearDown Function
    void TearDown() override {
        // deallocate the integer
        delete test_var; 
        test_var = nullptr;
    }
};
// to verify equality
TEST_F(FixtureDemo, ForEquals) {
    EXPECT_EQ(42, *test_var); 
}
// to verify less than
TEST_F(FixtureDemo, ForLessThan) {
    EXPECT_LT(42, *test_var); 
}

// main function
int main(int argc, char **argv) {
    ::testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}

當您執行此程式碼時,控制檯將顯示以下輸出:

Test project D:/gTest/test6/build
    Start 1: FixtureDemo.ForEquals
1/2 Test #1: FixtureDemo.ForEquals ............   Passed    0.03 sec
    Start 2: FixtureDemo.ForLessThan
2/2 Test #2: FixtureDemo.ForLessThan ..........***Failed    0.02 sec

50% tests passed, 1 tests failed out of 2

Total Test time (real) =   0.13 sec

The following tests FAILED:
          2 - FixtureDemo.ForLessThan (Failed)
廣告

© . All rights reserved.