- GoogleTest 教程
- GoogleTest - 首页
- GoogleTest - 环境设置
- GoogleTest - 运行第一个测试
- GoogleTest - 命名规范
- GoogleTest - 禁用测试
- GoogleTest - 断言
- GoogleTest - 死亡测试
- GoogleTest - 测试夹具
- GoogleTest - 事件监听器
- GoogleTest 有用资源
- GoogleTest - 有用资源
- GoogleTest - 讨论
GoogleTest - 命名规范
GoogleTest 中有几个术语可能会让用户感到困惑,尤其是测试、测试用例和测试套件。这些术语的含义可能与其他测试框架不同。在本教程中,我们将了解它们,以避免在后续章节中可能出现的任何混淆。
测试 & 测试用例
测试指的是一段用于验证另一段代码(通常是函数或类)是否按预期工作代码。在 GoogleTest 中,“测试” 术语与国际软件测试资格委员会 (ISTQB) 材料和各种软件质量教科书中的“测试用例”术语相同。
要在 GoogleTest 中创建一个简单的测试,请使用TEST()宏。它定义并命名一个测试函数。此宏接受测试套件的名称和测试的名称作为参数值。请注意,它不返回值。
语法
下面给出TEST()宏的语法:
TEST(TestSuiteName, TestName) {
... test body ...
}
测试套件名称和测试名称都必须是有效的 C++ 标识符,并且不应包含任何下划线 (_) 。
示例
以下代码显示了 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
TEST(CheckDivison, ForPositiveInput) {
EXPECT_EQ(12, divideNum(24, 2));
}
// main() function to run the test
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
测试套件 & 测试用例
从最初开始,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() function to run the test
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
广告