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