GoogleTest - 测试装置
GoogleTest 中的测试装置用于编写两个或多个针对类似数据的测试。它允许开发人员将相同的数据配置重复用于多个不同的测试。装置类派生自 gtest.h 头文件中的 ::testing::Test 类。
如何创建测试装置?
按照以下步骤在 GoogleTest − 中创建测试装置
- 创建一个派生自 testing::Test 类的类。其主体应受到保护。
- 声明您想要在此类中使用的对象。
- 然后,定义放置在构造函数或 SetUp() 函数内的设置逻辑。它将为每个测试准备对象。
- 要释放使用 SetUp() 分配的任何资源,请编写析构函数或 TearDown() 函数。这是可选的。
- 最后,定义要共享的测试子例程。
语法
创建测试装置的语法如下 −
// 定义测试装置类
class FirstTestFixture : public ::testing::Test {
protected:
// SetUp() function
void SetUp() override {
// setup code comes here
}
// TearDown() function
void TearDown() override {
// teardown code comes here
}
// 为测试定义通用数据成员
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>
// 测试装置类
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)

