Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在单元测试框架Google test中组合测试过滤器?_C++_Googletest - Fatal编程技术网

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

C++ 如何在单元测试框架Google test中组合测试过滤器?,c++,googletest,C++,Googletest,我有几个单元测试用例,我是用Google测试框架编写的: 测试等级: class Test: public testing::Test { public: virtual void SetUp() {} virtual void TearDown() {} }; 实际测试: TEST_F(Test, SubTest1) { // execute Test logic } TEST_F(Test, SubTest2) { // execute Test logic } TE

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

  • 测试等级:

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

    TEST_F(Test, SubTest1)
    {
      // execute Test logic
    }
    
    TEST_F(Test, SubTest2)
    {
      // execute Test logic
    }
    
    TEST_F(Test, SubTest3)
    {
      // execute Test logic
    }
    
  • 假设我只想显示
    子测试1
    子测试3
    ,我该怎么办?重要的是,我希望在一个中心位置(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();
    }
    

    → 第二个过滤器删除了第一个过滤器,只执行了
    子测试3

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

    "FIRST_PATTERN:SECOND_PATTERN"
    
    因此,在你的情况下:

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

    您还可以使用wilcards
    *
    ,您可以在
    -
    签名后添加排除模式。

    您可以禁用您不希望使用
    禁用前缀()运行的测试:

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

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


    您还可以使用
    --gtest\u还\u run\u disabled\u tests
    标志临时启用它们。

    但是我没有在main方法中列出已执行测试的列表。我没有写这篇文章,但我想在一个中心位置(main方法)看看哪些测试是实际执行的。这闻起来是一个糟糕的设计,违反了DRY原则。为什么需要已执行测试的列表?你会用每次新的测试更新列表吗?如果您忘记将测试添加到列表中怎么办?如果您想要更改fixture名称呢?在某种程度上,您可能是对的,但是我想要一个实际执行的测试的简单概述,在这里我可以“解析”不同的测试套件。在我的用例中,单元测试不需要完美的设计,也不需要任何指导线或类似的东西。这就是我想要的。同样好的是,你提到了通配符的用法。
    TEST_F(Test, DISABLED_SubTest2)
    {
      // execute Test logic
    }