GoogleTest - 术语
GoogleTest 中有几个术语可能会让用户感到困惑,尤其是测试、测试用例和测试套件。这些术语的含义可能与其他测试框架不同。在本教程中,我们将了解它们,以避免在后续章节中出现任何混淆。
测试和测试用例
测试是指一段代码,用于验证另一段代码(通常是函数或类)是否按预期工作。GoogleTest 中的术语"测试"与国际软件测试资格委员会 (ISTQB) 材料和各种软件质量教科书中的术语"测试用例"相同。
要在 GoogleTest 中创建一个简单的测试,请使用 TEST() 宏。它定义并命名一个测试函数。此宏接受测试套件的名称和测试的名称作为参数值。请注意,它不返回任何值。
语法
TEST() 宏的语法如下所示 −
TEST(TestSuiteName, TestName) { ... 测试主体 ... }
测试套件 名称和 测试 名称都必须是有效的 C++ 标识符,并且它们不应包含任何下划线 (_)。
示例
以下代码显示了 GoogleTest 中测试的基本示例 −
#include <gtest/gtest.h> // 要测试的函数 int divideNum(int nums1, int nums2) { if (nums2 == 0) { throw std::invalid_argument("Denominator cannot be zero"); } return nums1 / nums2; } // test TEST(CheckDivison, ForPositiveInput) { EXPECT_EQ(12, divideNum(24, 2)); } // main() 函数运行测试 int main(int argc, char **argv) { ::testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); }
上述代码的输出如下 −
Test project D:/gTest/test2/build Start 1: CheckDivison.ForPositiveInput 1/1 Test #1: CheckDivison.ForPositiveInput ....... Passed 0.02 sec 100% tests passed, 0 tests failed out of 1 Total Test time (real) = 0.2 sec
TestSuite 和测试用例
从最初的日子起,GoogleTest 就使用术语 "TestCase" 来指代一组相关测试。但是,ISTQB 材料和各种软件质量教科书都使用术语 "测试套件" 来指代相同的测试。
因此,GoogleTest 的最新版本开始用 "测试套件" 替换术语 "TestCase"。现在,首选 API 是 TestSuite。

要创建测试套件,请使用单个测试套件名称编写多个测试。但是,每个测试都应该有一个唯一的名称,如下所示 −
// test 1 TEST(TestSuiteName, FirstTestName) { ... test body ... } // test 2 TEST(TestSuiteName, SecondTestName) { ... test body ... }
示例
在下面的代码中,我们创建了一个测试套件来测试 GoogleTest 中的除法函数−
#include <gtest/gtest.h> // function to be tested int divideNum(int nums1, int nums2) { if (nums2 == 0) { throw std::invalid_argument("Denominator cannot be zero"); } return nums1 / nums2; } // test 1 TEST(CheckDivison, ForPositiveInput) { EXPECT_EQ(12, divideNum(24, 2)); } // test 2 TEST(CheckDivison, ForNegativeInput) { EXPECT_EQ(-2, divide(4, -2)); EXPECT_EQ(-2, divide(-4, 2)); EXPECT_EQ(2, divide(-4, -2)); } // test 3 TEST(CheckDivison, ForZeroDenominator) { EXPECT_THROW(divide(4, 0), std::invalid_argument); } // main() 函数运行测试 int main(int argc, char **argv) { ::testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); }
运行此代码时,将显示以下输出 −
Test project D:/gTest/test2/build Start 1: CheckDivison.ForPositiveInput 1/3 Test #1: CheckDivison.ForPositiveInput ..... Passed 0.03 sec Start 2: CheckDivison.ForNegativeInput 2/3 Test #2: CheckDivison.ForNegativeInput ..... Passed 0.01 sec Start 3: CheckDivison.ForZeroDenominator 3/3 Test #3: CheckDivison.ForZeroDenominator ... Passed 0.02 sec 100% tests passed, 0 tests failed out of 3 Total Test time (real) = 0.10 sec