如何在单元测试框架 Google 测试中组合测试过滤器?

How can I combine test filters in the unit testing framework Google Test?

我有几个单元测试用例,是我用Google测试框架写的:

  1. 测试class:

    class Test: public testing::Test
    {
    public:
      virtual void SetUp() {}
      virtual void TearDown() {}
    };
    
  2. 实际测试:

    TEST_F(Test, SubTest1)
    {
      // execute Test logic
    }
    
    TEST_F(Test, SubTest2)
    {
      // execute Test logic
    }
    
    TEST_F(Test, SubTest3)
    {
      // execute Test logic
    }
    

Assumed that I want to display only SubTest1 and SubTest3, what do I have to do? Important is, that I want to see at a central place (main method), which tests are actually executed.

我想,我可以 "stack" 过滤器,如下例所示,但这种方法不起作用:

int main(int argc, char** argv)
{
  ::testing::InitGoogleMock(&argc, argv);

  ::testing::GTEST_FLAG(filter) = "Test.SubTest1";
  ::testing::GTEST_FLAG(filter) = "Test.SubTest3";
  return RUN_ALL_TESTS();
}

→ 第二个过滤器删除了第一个过滤器,只执行 SubTest3

我试图找到一些官方 googletest 参考,但我只找到 this article 解释 googletest 过滤器的语法。如果你想 运行 测试用例匹配 2 种不同模式之一,你的过滤器应该是这样的:

"FIRST_PATTERN:SECOND_PATTERN"

因此,在您的情况下:

  ::testing::GTEST_FLAG(filter) = "Test.SubTest1:Test.SubTest3";

您还可以使用通配符 ?*,并且可以在 - 符号后添加排除模式。

您可以禁用您不想 运行 带有 DISABLED_ 前缀的测试 (see documentation):

TEST_F(Test, DISABLED_SubTest2)
{
  // execute Test logic
}

测试仍会被编译,但 GoogleTest 不会 运行。

GoogleTest 在测试完成后提供了一个很好的信息,其中有多少被禁用。

您也可以使用 --gtest_also_run_disabled_tests 标志暂时启用它们。