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

