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

时间:2018-09-19 09:07:16

标签: c++ googletest

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

  1. 测试类:

    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
    }
    
  

假设我只想显示SubTest1SubTest3,我该怎么办?重要的是,我想在一个中心位置(main方法)看到实际执行的测试。

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

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

2 个答案:

答案 0 :(得分:4)

我试图找到一些官方的googletest参考,但是我只发现this article在解释googletest过滤器的语法。如果要运行与两种不同模式之一匹配的测试用例,则过滤器应如下所示:

"FIRST_PATTERN:SECOND_PATTERN"

所以,就您而言:

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

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

答案 1 :(得分:3)

您可以禁用不想使用DISABLED_前缀(see documentation)进行的测试:

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

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

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

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