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)