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.