- 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)
广告