- GoogleTest 教程
- GoogleTest - 主页
- GoogleTest - 环境设置
- GoogleTest - 运行第一个测试
- GoogleTest - 命名法
- GoogleTest - 禁用测试
- GoogleTest - 断言
- GoogleTest - 死亡测试用例
- GoogleTest - 测试固定装置
- GoogleTest - 事件侦听器
- GoogleTest 有用资源
- GoogleTest - 有用资源
- GoogleTest - 讨论
GoogleTest - 禁用测试
一个好的测试框架应该具备临时禁用测试的功能。假设有一个测试因缺陷而失败并且会阻塞其他测试。在这种情况下,唯一的解决方案就是禁用测试,以便其他测试能继续运行。这在一个功能仍处于开发阶段且尚未准备好接受测试时也有帮助。
在 GoogleTest 中,你可以通过使用 DISABLED_ 前缀或使用 GTEST_SKIP() 宏来禁用测试。GoogleTest 是一个用于测试 C++ 代码的测试框架。
使用 DISABLED_ 前缀
可以通过将测试名称更改为 DISABLED_*,其中“*”表示测试的名称,来标记测试为禁用。通过此方法,当运行测试二进制文件时,GoogleTest 将跳过指定的测试。但是,测试仍然会被编译。
语法
DISABLED_ 前缀的语法如下 −
DISABLED_TestName
范例
在这个代码中,我们使用 DISABLED_ 前缀在 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, divideNum(4, -2));
EXPECT_EQ(-2, divideNum(-4, 2));
EXPECT_EQ(2, divideNum(-4, -2));
}
// test 3
TEST(DISABLED_CheckDivison, ForZeroDenominator) {
EXPECT_THROW(divideNum(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.02 sec
Start 2: CheckDivison.ForNegativeInput
2/3 Test #2: CheckDivison.ForNegativeInput ..... Passed 0.02 sec
Start 3: CheckDivison.ForZeroDenominator
3/3 Test #3: CheckDivison.ForZeroDenominator ...***Not Run (Disabled) 0.00 sec
100% tests passed, 0 tests failed out of 2
Total Test time (real) = 0.13 sec
The following tests did not run:
3 - CheckDivison.ForZeroDenominator (Disabled)
使用 GTEST_SKIP() 宏
GTEST_SKIP() 宏是 GoogleTest 在 1.10.0 版本发布中新增的一项功能。它用于根据给定条件在运行时跳过测试。
语法
GTEST_SKIP() 宏的语法如下 −
GTEST_SKIP() << "Text to display";
范例
下面的代码展示了如何在 GoogleTest 中使用 GTEST_SKIP() 禁用测试 −
#include <gtest/gtest.h>
// function to be tested
int prod(int num1, int num2) {
return num1 * num2;
}
// to disable test
bool disableTest(int num1, int num2) {
if(num1 == num2) {
return true;
} else {
return false;
}
}
// Test suite
TEST(ProductTest, ForEqualNumbers) {
int num1 = 3;
int num2 = 3;
if (disableTest(num1, num2)) {
GTEST_SKIP() << "Disabling test";
}
ASSERT_EQ(prod(num1, num2), 9);
}
int main(int argc, char **argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
上述代码的输出如下 −
Test project D:/gTest/test3/build
Start 1: ProductTest.ForEqualNumbers
1/1 Test #1: ProductTest.ForEqualNumbers ......***Skipped 0.03 sec
100% tests passed, 0 tests failed out of 1
Total Test time (real) = 0.10 sec
The following tests did not run:
1 - ProductTest.ForEqualNumbers (Skipped)
广告