10

googletest 单元测试可以按类别分组吗?例如“SlowRunning”、“BugRegression”等。我发现最接近的是 --gtest_filter 选项。通过将类别名称附加/附加到测试或夹具名称中,我可以模拟组的存在。这不允许我创建通常不运行的组。

如果 googletest 中不存在类别,是否有好的或最佳实践解决方法?

编辑:另一种方法是使用 --gtest_also_run_disabled_tests。在测试前添加 DISABLED_ 可以为您提供一个条件类别,但我觉得我在执行此操作时误用了 DISABLED。

4

2 回答 2

7

一种方法是使用 gtest_filter 选项并使用测试的命名约定(如您所描述的那样)。

TEST_F(Foo, SlowRunning_test1) {...}
TEST_F(Foo, BugRegression_test1) {...}
TEST_F(Foo, SlowRunningBugRegression_test1) {...}

其他方式对任何类型的测试使用单独的二进制文件/可执行文件。这种方式有一些限制,因为 gtest 使用静态自动注册,所以如果你包含一些源文件 - 在这个源文件中实现的所有测试都将包含在生成的二进制/可执行文件中。

我认为第一种方法更好。此外,我将实施新的测试注册宏以使我的生活更轻松:

#define GROUP_TEST_F(GroupName, TestBase, TestName) \
#ifdef NO_GROUP_TESTS \
   TEST_F(TestBase, TestName) \
#else \
   TEST_F(TestBase, GroupName##_##TestName) \
#endif
于 2012-09-27T06:51:55.737 回答
2

在单个测试可执行文件中运行测试子集的唯一方法是 --gtest_filter。执行集成测试和单元测试有两种解决方法

  1. 使用像 Integration.Testname 和 Unit.Testname 这样的命名约定。除此之外,我还将维护 RunIntegration.bat 和 RunUnit.bat 等脚本文件,以便从我的构建自动化脚本中针对不同的场景运行。
  2. 维护集成和单元或其他类别的不同测试可执行文件。在视觉工作室中,每个都有单独的项目。
于 2012-09-26T22:08:35.173 回答