GoogleTest - 禁用测试
一个好的测试框架应该具有暂时禁用测试的功能。假设有一个测试由于错误而失败,并且阻止了其他测试。在这种情况下,只有一个解决方案是可行的,那就是禁用测试,以便其他测试继续运行。当某个功能仍在开发中且尚未准备好进行测试时,它也很有用。
在 GoogleTest 中,您可以使用 DISABLED_ 前缀或使用 GTEST_SKIP() 宏来禁用测试。GoogleTest 是一个用于测试 C++ 代码的测试框架。
使用 DISABLED_ 前缀
可以通过将测试的名称更改为 DISABLED_* 来将其标记为已禁用,其中 "*" 代表测试的名称。通过这样做,GoogleTest 会在您运行测试二进制文件时跳过指定的测试。但是,测试仍然会被编译。
语法
DISABLED_ 前缀的语法如下 −
DISABLED_TestName
示例
在此代码中,我们使用 DISABLED_ 前缀禁用 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 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() 函数运行测试
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";
示例
以下代码显示如何使用 GTEST_SKIP() 禁用 GoogleTest 中的测试 −
#include <gtest/gtest.h>
// 要测试的函数
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)

