GTest Day 3 —— 测试夹具(TestFixture)的使用
# GTest Day 3 —— 测试夹具(TestFixture)的使用
如果您发现自己编写了两个或多个对相似数据进行操作的测试,您可以使用测试夹具。这允许您为多个不同的测试重用相同的对象配置。
创建测试夹具:
- 创建一个继承
::testing::Test
的类。 - 在类中声明你想复用的对象和数据。
- 定义构造和析构函数,并以protected访问权限,声明一个编写一个
void SetUp() override
和void TearDown() override
函数。 - 如果有需要可以定义一些公共的函数,只要你想要。
示例:
class DemoFixtrue : public testing::Test {
public:
DemoFixtrue() = default;
~DemoFixtrue() override = default;
void DoSomething() {}
protected:
void SetUp() override {}
void TearDown() override {}
};
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
SetUp()
和TearDown()
函数的作用,后面会说明。
使用测试夹具,需要使用TEST_F
而不是TEST
。在TEST_F
中可以访问测试夹具中的对象和函数。
TEST_F(TestFixtureName, ) {
... test body ...
}
1
2
3
2
3
TestFixtureName
就是我们创建的测试夹具类的名称。所以使用TEST_F
之前需要定义好测试夹具。
TestName
是测试用例名称。
对于每个测试TEST_F()
,googletest 将在运行时创建一个新的测试夹具,立即通过 初始化它SetUp()
,运行测试,通过调用清理TearDown()
,然后删除测试夹具。请注意,同一测试套件中的不同测试具有不同的测试夹具对象,并且 googletest 总是在创建下一个测试夹具之前删除一个测试夹具。googletest 不会为多个测试重用相同的测试夹具。一项测试对夹具所做的任何更改都不会影响其他测试。
TEST_F(DemoFixtrue, test1)
{
DoSomething();
}
TEST_F(DemoFixtrue, test2)
{
DoSomething();
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
总结一下googletest运行测试夹具的顺序:
- 保存所有 googletest 标志的状态。
- 为第一个测试创建一个测试夹具对象(成员初始化,构造函数调用)。
- 执行测试夹具的
SetUp()
函数进行初始化。 - 在测试夹具对象上运行测试用例。
- 执行测试夹具的
TearDown()
函数进行清理。 - 删除测试夹具对象(析构函数调用)。
- 恢复所有 googletest 标志的状态。
- 对下一个测试重复上述步骤,直到所有测试都运行。
如果发生致命故障,则将跳过后续步骤。
上次更新: 2022/11/06, 19:00:13