C++ 如何在单元测试框架Google test中组合测试过滤器?
我有几个单元测试用例,我是用Google测试框架编写的: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
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
}