在 gtest 中禁用整个测试用例

Disable whole test case in gtest

如何在 gtest 中禁用一个完整的测试用例? (一个测试用例中的所有测试,而不仅仅是单个测试)

gtest 文档中建议的格式是按以下方式组织测试:

class1test.cpp:

Test(Class1Test, TestA)
{
    ...
}

Test(Class1Test, TestB)
{
    ...
}

...

class2test.cpp:

Test(Class2Test, TestA)
{
    ...
}

Test(Class2Test, TestB)
{
    ...
}

....

class3test.cpp

等等...

我知道在测试中添加前缀 DISABLED_ 会阻止它 运行(例如:Test(Class1Test, DISABLED_TestB)

但是如果我想禁用测试用例Class1Test中的所有测试怎么办?

这个 post GoogleTest: How to skip a test? 建议使用 gtest 过滤器,但这对于我想做的事情来说似乎是一个复杂的解决方案。 它 gtest 过滤器确实是唯一的解决方案,我应该在哪里编写禁用测试用例的过滤器?

运行 测试 --gtest_filter=-Class1Test.* 应该跳过 Class1Test 测试用例中的所有测试。这看起来并不复杂。

  1. 可以在main函数中这样写:

    testing::GTEST_FLAG(filter) = "-Class1Test.*";
    

    之前

    RUN_ALL_TESTS();
    
  2. 如果您在 Microsoft Visual Studio 中进行测试,您可以这样做: 打开 TestProject 的属性并设置行

    --gtest_filter=-Class1Test.*

在配置属性/调试/命令参数中

  1. 您可以使用此评论您的代码

    /* your tests */

或这个

    #ifdef _0
        your tests
    #endif

Gtest 文档准确回答了这个问题 - 请参阅下面的摘录 (摘自:https://github.com/google/googletest/blob/master/googletest/docs/advanced.md

暂时禁用测试

如果您有无法立即修复的损坏测试,您可以添加 DISABLED_ 前缀。这会将其排除在执行之外。这是 比注释掉代码或使用 #if 0 更好,因为禁用的测试是 仍然编译(因此不会腐烂)。

如果您需要禁用测试套件中的所有测试,您可以添加 DISABLED_ 到每个测试名称的前面,或者将它添加到前面 测试套件名称。

例如,以下测试不会被 googletest 运行,即使它们 仍将被编译:

// Tests that Foo does Abc.
TEST(FooTest, DISABLED_DoesAbc) { ... }

class DISABLED_BarTest : public testing::Test { ... };

// Tests that Bar does Xyz.
TEST_F(DISABLED_BarTest, DoesXyz) { ... }