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

h0c*_*355 4 c++ googletest

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

  1. 测试类:

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

    TEST_F(Test, SubTest1)
    {
      // execute Test logic
    }
    
    TEST_F(Test, SubTest2)
    {
      // execute Test logic
    }
    
    TEST_F(Test, SubTest3)
    {
      // execute Test logic
    }
    
    Run Code Online (Sandbox Code Playgroud)

假设我只想显示SubTest1and SubTest3,我必须做什么?重要的是,我想在一个中心位置(主要方法)看到实际执行了哪些测试。

我想,我可以像下面的例子一样“堆叠”过滤器,但这种方法不起作用:

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();
}
Run Code Online (Sandbox Code Playgroud)

? 第二个过滤器删除了第一个过滤器,仅SubTest3执行。

Pta*_*666 6

我试图找到一些官方googletest参考,但我只找到了这篇文章解释了googletest过滤器的语法。如果您想运行与 2 种不同模式之一匹配的测试用例,您的过滤器应如下所示:

"FIRST_PATTERN:SECOND_PATTERN"
Run Code Online (Sandbox Code Playgroud)

所以,在你的情况下:

  ::testing::GTEST_FLAG(filter) = "Test.SubTest1:Test.SubTest3";
Run Code Online (Sandbox Code Playgroud)

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